【问题标题】:Callback of Matlab TimerMatlab定时器的回调
【发布时间】:2014-07-07 11:14:01
【问题描述】:

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

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

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

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

【问题讨论】:

标签: matlab timer preemption


【解决方案1】:

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

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

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


documentation 表示以下内容:

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

另一个doc page上也有这个注释:

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

【讨论】:

    猜你喜欢
    • 2011-10-20
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多