2009-06-12 40 views
4

我有一個MATLAB GUI和一個將數據寫入文件的單獨應用程序。 我想讓我的MATLAB GUI定期檢查文件,並在更改時更新GUI。如何在後臺更新MATLAB GUI?

在Java中,我會使用SwingUtils.Timer(sp?)對象來做這樣的事情。 MATLAB有定時器功能嗎?我可以編寫一個java類,並按照我的意思去做,但是想要一個快速和骯髒的演示,最好是純MATLAB。

回答

11

您可以使用TIMER函數在MATLAB中創建計時器對象。例如,這創建了一個計時器對象應執行函數myFcn一旦定時器後每10秒啓動:

timerObject = timer('TimerFcn',@myFcn,'ExecutionMode','fixedRate',... 
        'Period',10.0); 

定時器啓動和使用函數STARTSTOP停止。您還應該始終記住,在完成使用後,請使用DELETE將其刪除。您可以在MATLAB documentation中找到有關使用定時器的更多信息。

值得注意的是,如果您想要更新GUIDE GUI中的軸對象,則需要額外的一點「欺騙」才能使其工作。您必須更改GUIDE中軸對象的HandleVisibility屬性,或者您必須明確獲取該句柄。要做到這一點,如下更改timerObject建設(這是假設你GUIDE軸窗口產生的GUI被稱爲axes1):

timerData.axes = handles.axes1; 
timerData.n = 1;     % some state needed for the plots. 
timerObject = timer('TimerFcn',@myFcn,... 
        'ExecutionMode','fixedRate',... 
        'Period',10.0,... 
        'UserData', timerData); 

然後在myFcn,我們需要參考的軸對象。具體來說:

function [] = myFcn(timerObj, event) 
    timerData = get(timerObj, 'UserData'); 
    plot(timerData.axes, (1:n)/n, sin(20*2*pi*(1:n)/n)); 
    line((1:n)/n, cos(20*2*pi*(1:n)/n, 'Parent', timerData.axes); 
    timerData.n = timerData.n + 1; 
    set(timerObj, 'UserData', timerData); 
end