Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 如何在后台更新MatlabGUI?_Multithreading_User Interface_Matlab_Timer - Fatal编程技术网

Multithreading 如何在后台更新MatlabGUI?

Multithreading 如何在后台更新MatlabGUI?,multithreading,user-interface,matlab,timer,Multithreading,User Interface,Matlab,Timer,我有一个MatlabGUI和一个将数据写入文件的单独应用程序。 我希望我的MatlabGUI定期检查文件,并在更改时更新GUI 在Java中,我会使用SwingUtils.Timer(sp?)对象来执行类似的操作。MATLAB有定时器功能吗?我可以编写一个java类,我想我可以这样做,但是我想要一个快速而肮脏的演示,最好是纯MATLAB。您可以使用该函数在MATLAB中创建计时器对象。例如,这将创建一个计时器对象,该对象应在计时器启动后每10秒执行一次函数myFcn: timerObject =

我有一个MatlabGUI和一个将数据写入文件的单独应用程序。 我希望我的MatlabGUI定期检查文件,并在更改时更新GUI


在Java中,我会使用SwingUtils.Timer(sp?)对象来执行类似的操作。MATLAB有定时器功能吗?我可以编写一个java类,我想我可以这样做,但是我想要一个快速而肮脏的演示,最好是纯MATLAB。

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

timerObject = timer('TimerFcn',@myFcn,'ExecutionMode','fixedRate',...
                    'Period',10.0);
使用函数和启动和停止计时器。您还应始终记住在使用完它们后将其删除。您可以在中找到有关使用计时器的更多信息

值得注意的是,如果您想在指南GUI中更新Axis对象,则需要另外一点“技巧”来实现这一点。必须在向导中更改Axis对象的属性,或者必须显式获取句柄。为此,按如下方式更改timerObject构造(假设指南生成的GUI中的轴窗口称为axes1):

然后在
myFcn
中,我们需要引用axes对象。具体而言:

 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
 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