我一直在写一个CAPL脚本,它会在一定的延迟后在每个通道上发送消息(2个没有)。我想使用 SetTimer()和 mstimer :: isRunning 函数生成以下延迟。 我可以使用setTimer函数,但我不知道如何使用 mstimer :: isRunning 。 代码如下所示:
Variables{
message * temp = {DLC=8};
mstimer timer1;
}
on timer timer1{
//Do nothing
}
onstart{
for(noofChannel=1;noofChannel<=2;noofChannel++){
settimer(timer1,100);
temp.CAN = noofChannel;
temp.ID = 0xAA;
While (mstimer::isrunning)==0 // I need to write this right.
{ //wait for timer to expire}
Output(temp);
}
答案 0 :(得分:1)
而不是mstimer::isrunning
使用isTimerActive()
方法。
如果计时器正在运行,isTimerActive()
将返回1,如果计时器已过期,则返回0。
所以你的代码看起来像:
on start{
for(noofChannel=1;noofChannel<=2;noofChannel++){
settimer(timer1,100);
temp.CAN = noofChannel;
temp.ID = 0xAA;
While (isTimerActive(timer1) == 1)
{ //wait for timer to expire}
}
Output(temp);
}
}
但我不建议这样做。您可以通过on start
onTimer
中循环
on start{
temp.CAN = 1;
temp.ID = 0xAA;
Output(temp);
settimer(timer1,100);
}
on timer timer1{
temp.CAN = 2;
Output(temp);
}
如果你想保持它是通用的,即不限制为2个通道,你可以取一个变量并在计时器中递增它。
答案 1 :(得分:0)
我向Vector询问了同样的问题,他们的答案如下: “msTimer.isRunning”给出了Timer的状态,无论计时器是否运行 可用性如下所述:
on timer myTimer
{
write("Running Status %d",myTimer.isRunning());
}
“timeToElapse()”函数也可用于以下情况。 语法:
timer t;
setTimer(t,5);
write("Time to elapse: %d",timeToElapse(t)); // Writes 5
答案 2 :(得分:-1)
ListDatabasesIterable