2014-07-07 86 views
1

下面的程序包含一個timer對象定義及其啓動命令。然後程序繼續執行其他語句。Matlab定時器的回調

我的問題是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 
+0

我要引用你到[這個問題](http://www.mathworks.com/matlabcentral/answers/10394-timer-and-interruptible-off-button-callback-priority-preemption)在MATLAB的答案。還有一個問題,就在我認爲是相關的那一天:http://stackoverflow.com/q/24368424/97160 – Amro

回答

0

底線是MATLAB是有效的單線程。因此,如果當前正在執行一個長操作,定時器回調將無法運行,並且根據定時器對象屬性(讀取約BusyMode),將事件添加到隊列中,最終MATLAB會在第一次得到一個機會..

據我瞭解(這是我自己的猜測),MATLAB timers可中斷語句之間執行,但不是期間一個漫長的。

所以理論上它應該後0.01秒運行,但沒有保證......


documentation說以下內容:

注:指定的執行時間和實際計時器 的執行可能會有所不同,因爲計時器對象在MATLAB單線程 執行環境中工作。這個時間延遲的長度取決於 MATLAB正在執行的其他處理。要強制執行 事件隊列中的回調函數,請在代碼中包含對 drawnow函數的調用。 drawnow函數將刷新事件 隊列。

也有這個音符上的另一個doc page

注:如果回調涉及CPU密集型任務,如更新的人物回調函數的執行可能會延遲。