【问题标题】:Are timers running, while loops are active?计时器是否正在运行,而循环是否处于活动状态?
【发布时间】:2016-10-29 03:52:51
【问题描述】:

这是我的代码:

setTimer(delay, (SEEDKEY_MAXTRY * SEEDKEY_FREQ) + (LOGIN_MAXTRY * LOGIN_FREQ));
do {
    // waits, until all operations have been executed;  
} while(isTimerActive(delay));

我确切地知道执行命令需要多长时间,因此我将计时器 delay 设置为显式值。我必须等待,直到我返回一些值。

模拟卡在这一点上,我的面板进入 Windows-“无响应”,我可以结束模拟的唯一方法是通过任务管理器。

我认为唯一的解释是,计时器需要更多时间,或者根本不执行,而我在 do ... while 语句中。 (与 while {} 相同)

有人可以证实这个想法,或者通过给我一个解决我的问题来证明我错了吗?

【问题讨论】:

    标签: capl canoe


    【解决方案1】:

    好吧,我总能找到解决方法,因为 CAPL 在 stackoverflow 上不太流行...


    对于想知道如何的读者:

    我只是使用了一个全局状态变量来限制用户在我的处理完成之前执行操作。

    【讨论】:

    • 我不知道 CAPL,但在大多数其他语言中,计时器独立于流控制。
    • 在CAPL中也应该是这样,但是因为循环而没有成功,所以我换了一种方式。除非有人在我上面的代码中发现另一个错误,否则我认为 CAPL 使用循环可能有点错误,这取决于计时器中计算的结果...
    • 你是对的。 CAPL 在处理没有执行任何操作的循环时存在问题。这就是为什么当你尝试运行 void while 时它会崩溃。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 2016-01-10
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 2013-04-06
    相关资源
    最近更新 更多