找回密码
 点一下
查看: 1138|回复: 11

天哪!循环有语句耗时的限制?

[复制链接]
发表于 2009-4-11 17:22:55 | 显示全部楼层 |阅读模式
因为发现自己写的数组绑定系统出了点问题,循环意外终止,而且没有运行循环外紧接着的语句,所以测试了一下。
[jass] loop
               
                exitwhen Next[x] == 0
                    call BJDebugMsg(I2S(Next[x])+" "+I2S(x))
                    set x = Next[x]
                    //set udg_step = udg_step + 1
                endloop[/jass]
注释掉set udg_step = udg_step + 1和不注释掉set udg_step = udg_step + 1的结果并不一样。
请问这什么跟什么啊?
发表于 2009-4-11 17:27:57 | 显示全部楼层
貌似结果肯定不同的吧

还有就是貌似函数执行有限制,超过多少次后自动掐断
回复

使用道具 举报

发表于 2009-4-11 17:29:35 | 显示全部楼层
http://www.islga.org/bbs/read.php?tid=855
这个,很强悍的研究
回复

使用道具 举报

 楼主| 发表于 2009-4-11 17:30:31 | 显示全部楼层
怎么办啊怎么办?
才这么一点点都这样子啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊





我的结果不同指的是x每被变一次实际上我把她记录了,注释掉发现x被记录的次数比美注释掉多,并不是表面上step的值不一样。因为step事实上是没用的,只是用来做测试占运算次数
回复

使用道具 举报

发表于 2009-4-11 17:42:29 | 显示全部楼层
不要让循环进行太过次,两个很大的循环之间用TriggerSleepAction(0)
数组到8192就可以停止了,可以参考linzefei写的系统
回复

使用道具 举报

 楼主| 发表于 2009-4-11 17:50:07 | 显示全部楼层
可是,我用循环SetIntger,而SetInteger函数内部是有循环的,但是因为调用SetInteger我是在用循环存(总不可能一条一条手写5000条吧),所以SetInteger内部的TriggerSleepAction(0)因循环的存在就被最小化到了TriggerSleepAction(.1),如何破?

http://bbs.islga.org/read.php?tid=26125    可以简略看下SetReal那个主函数。因为模拟缓存所以有一条叫Add_string的语句,是用链表来存key1目录下的所有文件名,以便实现删除指定目录下的所有文件,但是貌似Add_string这个函数耗时巨大,会被中断在里面。请简单的帮忙看下add_string这个函数吧,应该来说耗时不大才对啊?思路也很简单啊?
回复

使用道具 举报

发表于 2009-4-11 17:54:42 | 显示全部楼层
如果LZ的这个系统的每一次读取、存储都需要大规模的变量赋值,那么LZ还是不要做了吧
每两个调用之间加sleep,
loop
...
endloop
call TriggerSleepAction(0)
loop
...
endloop
回复

使用道具 举报

 楼主| 发表于 2009-4-11 17:58:47 | 显示全部楼层
function test1 takes nothing returns nothing
     local integer i = 0
     loop
     exitwhen i >= 1000
     set i = i + 1
     endloop

     set i = 0
     call TriggerSleepAction(0)

     loop
     exitwhen i >= 1000
     set i = i + 1
     endloop
endfunction

function test2 takes nothing returns nothing
     local integer i = 0
     loop
     exitwhen i >= 1000
     call test1()
     set i = i + 1
     endloop
endfunction

这样的情况TriggerSleepAction(0)会变成TriggerSleepAction(.1)的


-------------------------------------------------

不做了?...............可是那个不能直接删除指定目录下的所有文件实在是太麻烦啊..
随便做个技能给计时器绑定 单位、点、目标、角度等等杂七杂八的动不动就要绑定7.8个数据的一大堆技能来说,清除的时候每个数据都写一条太麻烦。

当然对于7,8个数据我的数组绑定系统是不会被中断的....不然那运行的语句也太庞大了............
但是有这个缺陷实在让人不爽,害怕保不准什么时候会出问题
回复

使用道具 举报

发表于 2009-4-11 18:07:11 | 显示全部楼层
用缓存不是很好吗
回复

使用道具 举报

 楼主| 发表于 2009-4-11 18:08:24 | 显示全部楼层
对啊,用缓存不是很好吗?为什么你提出hash大家跟着做hash,然后现在又说用缓存大家该觉得缓存很好了吧?(抽风可无视)

可是!缓存可以被sync弄残废。
回复

使用道具 举报

发表于 2009-4-11 18:14:05 | 显示全部楼层
据小道消息,暴雪不久将会修正这个bug
回复

使用道具 举报

 楼主| 发表于 2009-4-11 18:16:04 | 显示全部楼层
据观察,中国人民向来喜欢忽悠暴雪
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-7-21 20:21 , Processed in 0.033421 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表