Matlab计时器在独立应用程序中不起作用

时间:2016-05-19 06:19:05

标签: matlab timer matlab-deployment matlab-compiler

我构建了这个应用程序,它监听某个文件夹,并不断检查是否有某些文件出现在其中。 一旦这些文件出现我激活另一个功能来处理它们。 我使用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$ 

1 个答案:

答案 0 :(得分:0)

要在单个定时器执行后停止编译的MATLAB程序退出,请使用

wait(t);
启动计时器后

。这将强制命令/终端窗口保持打开,直到计时器完成(完成执行指定任务的数量或意外导致错误的事情)。

基本上问题是编译的程序没有像普通MATLAB那样的命令窗口,因此一旦TimerFcn完成它就会关闭窗口。 See this answer from MATLAB Answers. 使用wait是最干净的方法,但是当计时器在执行之间等待时保持发生某些事情的任何事情(例如while循环)应该可以工作.....