魔兽地图编辑器吧 关注:64,987贴子:3,835,748
  • 13回复贴,共1

请教一个关于ForGroup()的问题

只看楼主收藏回复

两个进程同时调用ForGroup(),在callback中操作同一个全局变量,会不会产生冲突?
native ForGroup takes group whichGroup, code callback returns nothing


IP属地:日本1楼2014-04-21 19:46回复
    魔兽是单线程的,按照顺序执行,你担心的情况不存在


    IP属地:江苏2楼2014-04-21 19:47
    收起回复
      例如
      library Group
      globals
      private boolean flag
      endglobals
      private function isAllDeadEnum takes nothing returns nothing
      if IsUnitAliveBJ(GetEnumUnit()) then
      set flag = false
      endif
      endfunction
      public function isAllDead takes group g returns boolean
      set flag = true
      call ForGroup(g, function isAllDeadEnum)
      return flag
      endfunction
      endlibrary
      同时调用isAllDead()的话,返回值会有误吗?


      IP属地:日本3楼2014-04-21 19:48
      收起回复
        好少看到人问如此高端的问题


        IP属地:辽宁5楼2014-04-21 20:33
        收起回复
          不会有什么问题
          war3的线程差不多交叉并发的样子,就当成类似于线程的东西即可,反正只要保证操作完这个变量之前的顺序中没有回调/使用任何能执行某其他操作了这个变量的触发器的动作就可以。
          不考虑变量冲突的话对于单位组的话哪怕你在回调的内部再次回调还用了一样的函数应该也没问题
          不过玩家组的话入口地址貌似有bug


          IP属地:美国6楼2014-04-22 12:03
          收起回复