【问题标题】:Create a pause-able timer in CAPL在 CAPL 中创建一个可暂停的计时器
【发布时间】:2019-10-14 16:14:06
【问题描述】:

我想在 CAPL 中创建一个可暂停的计时器来监控一个真正的系统计时器,该计时器仅在某些条件下计时,如果不满足,则暂停。

由于我在 CAPL 中找不到任何 pauseTimer() 函数,我该如何实现呢?

【问题讨论】:

    标签: timer capl


    【解决方案1】:

    我能够通过变通方法实现我的目标。无法暂停计时器对象,但可以将其丢弃(注意经过了多少时间)并在之后作为新对象重新启动。

    假设您有一个计时器,当且仅当某个条件适用时,该计时器才会计时。请参考以下代码。

    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 上添加了重置条件以从完整持续时间重新启动时钟,但总的来说,这是实现倒计时计时器的一种可行方法,当条件不满足时可以暂停该计时器。

    任何改进都会被广泛接受。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 2017-07-27
      相关资源
      最近更新 更多