找回密码
 点一下
查看: 2171|回复: 3

问个问题(很严重的说)

[复制链接]
发表于 2008-2-16 14:28:44 | 显示全部楼层 |阅读模式
PolledWait究竟有什么作用?
发表于 2008-2-16 14:57:18 | 显示全部楼层
[codes=jass]function PolledWait takes real duration returns nothing
    local timer t
    local real  timeRemaining

    if (duration > 0) then
        set t = CreateTimer()
        call TimerStart(t, duration, false, null)
        loop
            set timeRemaining = TimerGetRemaining(t)
            exitwhen timeRemaining <= 0

            // If we have a bit of time left, skip past 10% of the remaining
            // duration instead of checking every interval, to minimize the
            // polling on long waits.
            if (timeRemaining > bj_POLLED_WAIT_SKIP_THRESHOLD) then
                call TriggerSleepAction(0.1 * timeRemaining)
            else
                call TriggerSleepAction(bj_POLLED_WAIT_INTERVAL)
            endif
        endloop
        call DestroyTimer(t)
    endif
endfunction[/codes]

其中bj_POLLED_WAIT_INTERVAL=0.10
bj_POLLED_WAIT_SKIP_THRESHOLD =2.00

貌似就是不断判断计时器剩余时间,大于2秒过剩余时间*0.1再判断,小于2秒过0.1秒再判断
剩余时间小于等于0时判断等待结束,摧毁计时器
回复

使用道具 举报

发表于 2008-2-16 17:01:27 | 显示全部楼层
引用楼主bsni于2008-02-16 14:28发表的 问个问题(很严重的说) :
PolledWait究竟有什么作用?
一个等待函数而己,多次调用TriggerSleepAction的.
我的意见是,如果等待的是5秒之内的,对精确度要求不高的,用TriggerSleepAction, 长时间的等待,可以用PollWait.
如果对精度要求很高,用Timer.

举个例子来说,你一步能走1米(但是,你不是机器,走得并不是哪次都正1米),100米前有一个悬崖,让你走到悬崖边上,你如何走?
走100步么?  肯定不行,也许多走1米了呢(结果不言自明).
PollWait的办法是,先走90 (90=100*0.9)步,因为误差不会太大,所以,90步肯定不会出事.
之后,看一看,还差多少米,比如,90步后还差9米,那再走8 (9*0.9=8.1)步,之后看看还差多少, 比如还差1.5米,再走一步,剩0.6米,再半步,结果到地方了.
回复

使用道具 举报

 楼主| 发表于 2008-2-17 07:04:20 | 显示全部楼层
这么说还是比较有用的^o^ ThankYou
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 04:01 , Processed in 0.066024 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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