找回密码
 点一下
查看: 1004|回复: 10

一个触发运行上限的问题

[复制链接]
发表于 2013-3-1 23:25:26 来自手机 | 显示全部楼层 |阅读模式
听说触发运行30w次就再也不能运行任何触发了是吗?也有的人说获取一些值3w次后就再也不能获取任何值了,这是真的吗?如果这是真的,那么一些计时器动作和时间里的计时器到期被触发了会记上触发运行次数的吗?如果是这样,那么我的图上将出现大量的马甲计时器移动,这样是不是很快就到触发运行上限了?有没有谁知道的?
发表于 2013-3-2 00:43:03 | 显示全部楼层
......你哪裡聽來的鬼扯蛋
我的觸發裡有每0.02秒跑10次迴圈的變量
也就是每秒運行500次,每分鐘運行30000次
我玩一個多小時都沒出問題

而且這種問你你自己用觸發跑跑看就可以解決了

点评

每0.02秒 所以執行上限被刷新了。 事實是有上限,至於多少主要看執行內容。  详情 回复 发表于 2013-3-5 01:11
回复

使用道具 举报

 楼主| 发表于 2013-3-2 08:09:27 来自手机 | 显示全部楼层
哦,看看有没有别的答案呢
回复

使用道具 举报

发表于 2013-3-5 01:11:11 | 显示全部楼层
本帖最后由 黑色乂zero仔 于 2013-3-5 01:19 编辑
貓野椰 发表于 2013-3-2 00:43
......你哪裡聽來的鬼扯蛋
我的觸發裡有每0.02秒跑10次迴圈的變量
也就是每秒運行500次,每分鐘運行30000 ...

抱歉更正一下,剛才沒看清楚

如果樓主指的是執行緒上限,是有的

因為執行緒的內容有上限,所以必須藉由TriggerSleepAction或TriggerExecute來將內容計算歸零
回复

使用道具 举报

发表于 2013-3-5 07:43:36 | 显示全部楼层
的确有执行30W的上限,但是这是指“一次”执行代码的限制
计时器是每XX秒执行“一次”,所以只要这“一次”的代码不会太多就行了,和计时器运行了多少次无关
且每个线程的计数器都是单独计算的,所以就算有N个计时器也没有关系
执行了N句代码后,加上“等待”既可将计数器清零

一般只有“循环”才会导致超过执行上限
顺序的代码想要突破上限怎么也要5000句吧...所以楼主不用担心计时器会吵过执行上限
使用循环时注意一下就可以了,循环上千次的时候注意加上等待

选取单位组时,每个单位都是单独“选取”的,所以也不用担心由于单位太多而造成上限

举个超过上限的例子:
新建数组变量的时候,数组大小设置为8192,然后你的地图的所有触发都会失效
因为数组大小就是循环赋初值

点评

對於新建數組變量,設置8192就會失效這部份,我不清楚你是怎樣得出的結果 我的Struct+timer就是直接從初始化時就創造8192個計時器。  详情 回复 发表于 2013-3-5 13:46
回复

使用道具 举报

发表于 2013-3-5 07:50:59 | 显示全部楼层
本帖最后由 卖萌新人菌 于 2013-3-5 07:53 编辑

顺便说一下,ExecuteFunc和TriggerExecute等执行函数或触发的函数都是开一个新线程来执行代码的,所以两边执行的代码量不会算在一起
需要无等待循环很多次时,常常将循环按次数分割为N份(一份为函数运行一次),使用ExecuteFunc来执行这个函数
回复

使用道具 举报

发表于 2013-3-5 13:46:29 | 显示全部楼层
卖萌新人菌 发表于 2013-3-5 07:43
的确有执行30W的上限,但是这是指“一次”执行代码的限制
计时器是每XX秒执行“一次”,所以只要这“一次” ...

對於新建數組變量,設置8192就會失效這部份,我不清楚你是怎樣得出的結果

我的Struct+timer就是直接從初始化時就創造8192個計時器。

点评

一个数组不够,那就用两个数组咯 你的“Struct+timer“没遇到问题只能说明你的地图足够小 只要有初值的变量稍微多一点,甚至地图上的单位稍微多一点,你就明白问题了~~ 另:无论如何,在地图开始一次创建8000+的  详情 回复 发表于 2013-3-5 17:51
回复

使用道具 举报

发表于 2013-3-5 17:51:04 | 显示全部楼层
黑色乂zero仔 发表于 2013-3-5 13:46
對於新建數組變量,設置8192就會失效這部份,我不清楚你是怎樣得出的結果

我的Struct+timer就是直接從 ...

一个数组不够,那就用两个数组咯
你的“Struct+timer“没遇到问题只能说明你的地图足够小
只要有初值的变量稍微多一点,甚至地图上的单位稍微多一点,你就明白问题了~~

另:无论如何,在地图开始一次创建8000+的计时器都是不明智的
不仅浪费资源,也全无必要

点评

不清楚你所指的地圖足夠小 是指地圖初始化動作和部隊方面還是甚麼 那請問dota和真三國這兩幅地圖小嗎?  详情 回复 发表于 2013-3-5 19:03
回复

使用道具 举报

发表于 2013-3-5 19:03:01 | 显示全部楼层
本帖最后由 黑色乂zero仔 于 2013-3-5 19:20 编辑
卖萌新人菌 发表于 2013-3-5 17:51
一个数组不够,那就用两个数组咯
你的“Struct+timer“没遇到问题只能说明你的地图足够小
只要有初值的 ...

不清楚你所指的地圖足夠小 是指地圖初始化動作和部隊方面還是甚麼

那請問dota和真三國這兩幅地圖小嗎?

當然也可能我的地圖初始化動作沒有達到上限

我在這方面做了很多的處理。

点评

嘛,既然你是DOTA的作者,那我也就不详细解释了,举个例子你自己看吧~~  详情 回复 发表于 2013-3-5 20:59
回复

使用道具 举报

发表于 2013-3-5 20:59:59 | 显示全部楼层
本帖最后由 希瓦 于 2013-3-5 21:31 编辑
黑色乂zero仔 发表于 2013-3-5 19:03
不清楚你所指的地圖足夠小 是指地圖初始化動作和部隊方面還是甚麼

那請問dota和真三國這兩幅地圖小嗎? ...

地图初始化时执行的代码也是有上限的
一般来说我们很难达到这个上限,因为很少有地图会在地图初始化的时候创建上万个单位,或者上万个变量
但是如果你设置了数组大小,8192什么的,那么相当于你一次为8000+个变量赋了初值,然后非常容易就会超过上限
超过上限之后,会直接跳过后面的代码,创建触发的代码就不会被运行了,所以所有触发都会失效

比如此地图,两个数组变量就可以使地图失效
实际上一个“计时器数组”加上些许单位,些许变量,也可以
skip.w3x (10.87 KB, 下载次数: 1)

点评

你所說的上限,我已經完全超過了.....  详情 回复 发表于 2013-3-5 21:36
回复

使用道具 举报

发表于 2013-3-5 21:36:20 | 显示全部楼层
萌萌新人菌 发表于 2013-3-5 20:59
地图初始化时执行的代码也是有上限的
一般来说我们很难达到这个上限,因为很少有地图会在地图初始化的时 ...

你所說的上限,我已經完全超過了.....
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 19:39 , Processed in 0.218192 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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