1

下面的程序包含一个timer对象定义,后跟它的启动命令。然后程序继续执行其他语句。

我的问题是是否TimerFcn会在0.01sec 之后准确调用,还是会等到 for 循环完成以触发计时器回调函数?

% My timer object  
t = timer('TimerFcn',@(x,y)G2(z), 'StartDelay',0.01);
start(t);

% Other program statements 
for i=1:m
    ...
end
4

1 回答 1

0

底线是 MATLAB 实际上是单线程的。因此,如果当前正在执行一个长操作,则计时器回调将没有机会运行,并且根据计时器对象属性(请参阅BusyMode),将改为将事件添加到 MATLAB 在第一次获取时最终会经过的队列机会..

据我了解(这是我自己的推测),MATLAB计时器可以在语句之间中断执行,但不能很长的语句中中断。

所以理论上它应该在 0.01 秒后运行,但不能保证......


文档说明了以下内容:

注意:定时器的指定执行时间和实际执行时间可能会有所不同,因为定时器对象在 MATLAB 单线程执行环境中工作。此时间延迟的长度取决于 MATLAB 正在执行的其他处理。要强制执行事件队列中的回调函数,请在代码中包含对 drawow 函数的调用。drawow 函数刷新事件队列。

另一个文档页面上也有此注释:

注意:如果回调涉及 CPU 密集型任务(例如更新图形),则回调函数的执行可能会延迟。

于 2014-07-07T11:34:35.387 回答