Vigoss98, Знаешь, есть такое действие Ждать(столькото секунд). В jass есть альтернативная команда call PolledWait(0.00). Она более совершенна чем просто Ждать(секунд). Но даже эта команда не дает мне ТОЧНОСТИ в переодических действиях.
Вообще подобное в лупах не стоит использовать. Да и вообще использовать. Вейт имеет отвратительную особенность - он может подвесить весь поток (триггер). По этому следует использовать таймеры для отсрочки какого либо действия.
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
EdiTTORR, а разница? триггер слип экшн все тот же вейт. Лучше уж разгрузить на несколько потоков через таймер чем держать все в одном потоке и через слип экшн.
PolledWait имеет очень большую погрешность, в циклах подобное применять не стоит, только при ожидании от 0.1 секунды самое маленькое, но тоже может быть погрешность
TriggerSleepAction - в циклах вызывает порой ошибки и погрешности
Лучше всего для частых повторейний с коротким промежутком от 0.1 до 0.01 секунд применять таймер через TimerStart и вызывать ей нужную функцию, работает 100% точно, быстро и без ошибок.
Сообщение отредактировал DarkVader - Пятница, 19 Ноября 2010, 18:58:50