Создайте таймер с возможностью паузы в CAPL - PullRequest
0 голосов
/ 14 октября 2019

Я хотел бы создать в CAPL таймер с возможностью приостановки, чтобы отслеживать реальный системный таймер, который срабатывает только при определенных условиях и делает паузу, если они не выполняются.

Поскольку я не могу найти какой-либоpauseTimer() функция в CAPL, как мне этого добиться?

1 Ответ

0 голосов
/ 14 октября 2019

Я смог достичь своей цели с помощью обходного пути. Невозможно приостановить объект таймера, но его можно утилизировать (учитывая, сколько времени прошло) и затем перезапустить как новый объект.

Предположим, у вас есть таймер, который должен отмечаться, если и только еслиприменяется определенное условие. Пожалуйста, обратитесь к следующему коду.

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, чтобы перезапустить часы с полной длительности, но в целом это работоспособный способ реализацииТаймеры обратного отсчета, которые могут быть приостановлены, если условия не выполняются.

Любые улучшения хорошо приняты.

...