Мне уже лет 5 твердят,что команда "wait" утечна. Объясните раз и навсегда,чем заменить команду ждать? Спасибо"

SсRealm, я скопировал PolledWait() и исправил немного, можешь скопировать и вызывать когда нужно. (Если я правильно исправил)
//Исправленный PolledWait()
    nothing Wait ( real duration ){ 
        timer t
        real timeRemaining
        if (duration > 0) {
            t = CreateTimer()
            TimerStart(t, duration, false, null)
            loop{
                timeRemaining = TimerGetRemaining(t)
                exitwhen timeRemaining <= 0
                if (timeRemaining > bj_POLLED_WAIT_SKIP_THRESHOLD) {
                    TriggerSleepAction(0.1 * timeRemaining)
                }else{
                    TriggerSleepAction(bj_POLLED_WAIT_INTERVAL)
                }
            }
            DestroyTimer(t)
            t = null
        }
    }
Это cJASS, если что
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
20
SсRealm, я скопировал PolledWait() и исправил немного, можешь скопировать и вызывать когда нужно. (Если я правильно исправил)
//Исправленный PolledWait()
    nothing Wait ( real duration ){ 
        timer t
        real timeRemaining
        if (duration > 0) {
            t = CreateTimer()
            TimerStart(t, duration, false, null)
            loop{
                timeRemaining = TimerGetRemaining(t)
                exitwhen timeRemaining <= 0
                if (timeRemaining > bj_POLLED_WAIT_SKIP_THRESHOLD) {
                    TriggerSleepAction(0.1 * timeRemaining)
                }else{
                    TriggerSleepAction(bj_POLLED_WAIT_INTERVAL)
                }
            }
            DestroyTimer(t)
            t = null
        }
    }
Это cJASS, если что
Принятый ответ
38
Моя версия на cjass (2010), меняет все слипы на себя, в том числе в гуи
void Sleep(real duration) {
    timer t
    real y
    if (duration>0.1) {
        y = duration-0.1
        t=CreateTimer()
        TimerStart(t,y,false,null)
        whilenot(TimerGetRemaining(t)<=0.0) {
            Trigger##SleepAction(0.01)
        }
        DestroyTimer(t)
        t=null
    } else {
        Trigger##SleepAction(duration)
    }
}

#define TriggerSleepAction(r) = Sleep(r)
20
А зачем #define TriggerSleepAction(r) = Sleep(r), он же не заменит к примеру TriggerSleepAction(2)
38
Всё заменит, r - параметр, изучайте мануал cJass для подробностей
13
 local real timeRemaining
 local real st=TimerGetElapsed( bj_gameStartedTimer)
    if st <= 0 then
        set bj_gameStartedTimer = CreateTimer()
        call TimerStart(bj_gameStartedTimer, 1000000, false, null)
    endif
    if (duration > 0) then
        loop
            set timeRemaining = duration - TimerGetElapsed( bj_gameStartedTimer) + st
            exitwhen timeRemaining <= 0
            if (timeRemaining > bj_POLLED_WAIT_SKIP_THRESHOLD) then
                call TriggerSleepAction(0.1 * timeRemaining)
            else
                call TriggerSleepAction(bj_POLLED_WAIT_INTERVAL)
            endif
        endloop
    endif
endfunction
Есть еще такая старая функция.
21
KaneThaumaturge:
SсRealm, я скопировал PolledWait() и исправил немного, можешь скопировать и вызывать когда нужно. (Если я правильно исправил)
//Исправленный PolledWait()
    nothing Wait ( real duration ){ 
        timer t
        real timeRemaining
        if (duration > 0) {
            t = CreateTimer()
            TimerStart(t, duration, false, null)
            loop{
                timeRemaining = TimerGetRemaining(t)
                exitwhen timeRemaining <= 0
                if (timeRemaining > bj_POLLED_WAIT_SKIP_THRESHOLD) {
                    TriggerSleepAction(0.1 * timeRemaining)
                }else{
                    TriggerSleepAction(bj_POLLED_WAIT_INTERVAL)
                }
            }
            DestroyTimer(t)
            t = null
        }
    }
Это cJASS, если что
Пасиба)
32
Как насчет не юзать вовсе вейтов в спеллах, вейты нужны для сикнхов и синиматиков, но никак не для спеллов.
Существуют таймеры и триггеры.
38
quq_CCCP, нормально всё в спеллах работает, если не нужна точность. Для всего свои цели
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.