我构建了这个应用程序,它监听某个文件夹,并不断检查是否有某些文件出现在其中。 一旦这些文件出现我激活另一个功能来处理它们。 我使用Timer对象实现了文件夹侦听器,其固定速率为30秒。 (即 - 每30秒应该检查文件夹的内容。) 当我从Matlab中运行代码时,一切都很好,但是当我编译然后部署应用程序时,计时器只执行一次然后退出程序。
任何想法是什么导致编译和未编译版本之间的这种差异?
系统是Ubuntu 14.04,
计时器对象实例:
myTimer = timer('TimerFcn',@checkFolderForChanges,'Period',h.listenerInterval,'ExecutionMode','fixedSpacing','BusyMode','queue','UserData',userData);
编译参数:
mcc -mv fileWatch.m
我添加了调试行来监视计时器, 来自Maltab:
timer running mode: on
timer tasksExecuted mode: 682
timer running mode: on
timer tasksExecuted mode: 683
独立部署版本(在1个计时器任务执行后退出:
timer running mode: on
timer tasksExecuted mode: 1
vncuser@mathlab:~/visualizer$
答案 0 :(得分:0)
要在单个定时器执行后停止编译的MATLAB程序退出,请使用
wait(t);
启动计时器后。这将强制命令/终端窗口保持打开,直到计时器完成(完成执行指定任务的数量或意外导致错误的事情)。
基本上问题是编译的程序没有像普通MATLAB那样的命令窗口,因此一旦TimerFcn完成它就会关闭窗口。 See this answer from MATLAB Answers. 使用wait是最干净的方法,但是当计时器在执行之间等待时保持发生某些事情的任何事情(例如while循环)应该可以工作.....