回调Matlab计时器

时间:2014-07-07 11:14:01

标签: matlab timer preemption

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

我的问题是TimerFcn是否会在0.01秒后完全调用,还是会等到for-loop完成才能启动定时器回调函数?

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

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

1 个答案:

答案 0 :(得分:0)

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

根据我的理解(这是我自己的猜测),MATLAB timers可以在语句之间中断执行,但期间 。< / p>

所以理论上它应该在0.01秒之后运行,但是没有保证......


documentation说明如下:

  

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

另一个doc page上还有这个说明:

  

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