在 CAPL 中创建一个可暂停的计时器
Create a pause-able timer in CAPL
我想在 CAPL 中创建一个可暂停的计时器来监视一个真正的系统计时器,该计时器只在特定条件下计时,如果不满足则暂停。
因为我在 CAPL 中找不到任何 pauseTimer()
功能,我该如何实现?
我能够通过解决方法实现我的目标。无法暂停计时器对象,但可以将其丢弃(注意经过了多少时间)并在之后作为新对象重新启动。
假设您有一个计时器,当且仅当特定条件适用时它才会计时。请参考以下代码。
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
上添加了重置条件以从完整持续时间重新启动时钟,但总体而言,这是实现倒数计时器的可行方法,可以在条件时暂停没有满足。
任何改进都会被接受。
我想在 CAPL 中创建一个可暂停的计时器来监视一个真正的系统计时器,该计时器只在特定条件下计时,如果不满足则暂停。
因为我在 CAPL 中找不到任何 pauseTimer()
功能,我该如何实现?
我能够通过解决方法实现我的目标。无法暂停计时器对象,但可以将其丢弃(注意经过了多少时间)并在之后作为新对象重新启动。
假设您有一个计时器,当且仅当特定条件适用时它才会计时。请参考以下代码。
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
上添加了重置条件以从完整持续时间重新启动时钟,但总体而言,这是实现倒数计时器的可行方法,可以在条件时暂停没有满足。
任何改进都会被接受。