我有一个MATLAB GUI和一个将数据写入文件的单独应用程序。 我想让我的MATLAB GUI定期检查文件,并在更改时更新GUI。如何在后台更新MATLAB GUI?
在Java中,我会使用SwingUtils.Timer(sp?)对象来做这样的事情。 MATLAB有定时器功能吗?我可以编写一个java类,并按照我的意思去做,但是想要一个快速和肮脏的演示,最好是纯MATLAB。
我有一个MATLAB GUI和一个将数据写入文件的单独应用程序。 我想让我的MATLAB GUI定期检查文件,并在更改时更新GUI。如何在后台更新MATLAB GUI?
在Java中,我会使用SwingUtils.Timer(sp?)对象来做这样的事情。 MATLAB有定时器功能吗?我可以编写一个java类,并按照我的意思去做,但是想要一个快速和肮脏的演示,最好是纯MATLAB。
您可以使用TIMER函数在MATLAB中创建计时器对象。例如,这创建了一个计时器对象应执行函数myFcn一旦定时器后每10秒启动:
timerObject = timer('TimerFcn',@myFcn,'ExecutionMode','fixedRate',...
'Period',10.0);
定时器启动和使用函数START和STOP停止。您还应该始终记住,在完成使用后,请使用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