Я смог достичь своей цели с помощью обходного пути. Невозможно приостановить объект таймера, но его можно утилизировать (учитывая, сколько времени прошло) и затем перезапустить как новый объект.
Предположим, у вас есть таймер, который должен отмечаться, если и только еслиприменяется определенное условие. Пожалуйста, обратитесь к следующему коду.
variables
{
msTimer PauseableTimer;
int64 Timeout = 100000; // 100s timer
int64 ElapsedTime = 0;
}
on message 0x10
{
if( /timer doesn't tick conditions / && isTimerActive(PauseableTimer))
{
ElapsedTime = Timeout - timeToElapse(PauseableTimer);
cancelTimer(PauseableTimer);
}
if( /timer ticks condition/ && !isTimerActive(PauseableTimer))
{
setTimer(PauseableTimer, Timeout - ElapsedTime);
}
}
Можно добавить еще несколько проверок, например, я добавил Сброс условий на ElapsedTime
, чтобы перезапустить часы с полной длительности, но в целом это работоспособный способ реализацииТаймеры обратного отсчета, которые могут быть приостановлены, если условия не выполняются.
Любые улучшения хорошо приняты.