如何在后台更新MATLAB GUI?

时间:2009-06-12 04:42:01

标签: multithreading user-interface matlab timer

我有一个MATLAB GUI和一个将数据写入文件的独立应用程序。 我希望我的MATLAB GUI能够定期检查文件,并在GUI发生变化时更新它。

在Java中,我使用SwingUtils.Timer(sp?)对象来做这样的事情。 MATLAB有定时器功能吗?我可以写一个java类并且我想这样做,但是想要一个快速和脏的演示,最好是纯MATLAB。

1 个答案:

答案 0 :(得分:11)

您可以使用TIMER函数在MATLAB中创建计时器对象。例如,这会创建一个计时器对象,它应该在计时器启动后每10秒执行一次函数 myFcn

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

使用STARTSTOP函数启动和停止计时器。您还应该始终记得在使用完{Rank}}时将其删除。您可以在DELETE中找到有关使用计时器的更多信息。

值得注意的是,如果您想要在GUIDE GUI中更新轴对象,则需要额外的“技巧”才能使其工作。您必须在GUIDE中更改axis对象的MATLAB documentation属性,或者必须显式获取句柄。为此,请按如下所示更改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中,我们需要引用axis对象。具体做法是:

 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