MATLAB事件和无限睡眠或检查循环

Bas*_*ing 2 events matlab event-handling infinite-loop

我需要对目录中的文件进行数据分析.

我想知道,如果它更好,

  1. 在目录上实现事件监听器,并在激活时启动分析过程.然后让程序永远进入睡眠状态:while(true), sleep(1e10), end

  2. 或者有一个循环轮询变化和反应.

我个人更喜欢听众的方式,因为一个人能够在几乎同时进入的两个新文件上开始两次分析但导致两个事件.而另一个解决方案可能只处理第一个解决方案,然后找到第二个新数据.
对于选项1额外的想法:通过调用隐藏MATLAB GUI frames=java.awt.Frame.getFrames和设置frames(index).setVisible(0)index的匹配com.mathworks.mde.desk.MLMainFrame-frame.(这个想法来自Yair Altman)

还有其他方法可以实现这样的事情吗?

And*_*ein 5

在这种情况下,(如果您使用的是Windows),最好的方法是使用它的强大功能.NET.

fileObj = System.IO.FileSystemWatcher('c:\work\temp');
fileObj.Filter = '*.txt';
fileObj.EnableRaisingEvents = true;
addlistener(fileObj,'Changed',@eventhandlerChanged);
Run Code Online (Sandbox Code Playgroud)

有不同的事件类型,您可以对它们使用相同的回调,或者使用不同的回调:

addlistener(fileObj, 'Changed', @eventhandlerChanged );
addlistener(fileObj, 'Deleted', @eventhandlerChanged );
addlistener(fileObj, 'Created', @eventhandlerChanged );
addlistener(fileObj, 'Renamed', @eventhandlerChanged );
Run Code Online (Sandbox Code Playgroud)

eventhandlerChanged你的回调功能在哪里?

function eventhandlerChanged(source,arg)
   disp('TXT file changed')
end
Run Code Online (Sandbox Code Playgroud)

无需使用sleep或轮询.如果你的程序是基于UI的,那么没有别的事可做,当用户关闭数字时,程序已经结束.事件回调的执行方式与按钮点击完全相同.如果您的程序类似于脚本,则可以使用无限循环.

更多信息请访问:http://www.mathworks.com/help/matlab/matlab_external/working-with-net-events-in-matlab.html