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

Posted

技术标签:

【中文标题】Matlab 计时器在独立应用程序中不起作用【英文标题】:Matlab timer doesnt work in stand alone application 【发布时间】:2016-05-19 06:19:04 【问题描述】:

我已经构建了这个应用程序,它监听某个文件夹并不断检查某些文件是否出现在其中。 一旦这些文件出现,我就会激活另一个功能来处理它们。 我使用一个固定速率为 30 秒的 Timer 对象实现了文件夹监听器。 (即 - 每 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$ 

【问题讨论】:

我怀疑计时器功能崩溃了 - 检查一切是否正确编译。 编译正确是什么意思?编译时我没有得到任何异常... 确保您需要的所有文件都包含在编译后的代码中——尤其是您的计时器函数将使用的所有函数/文件 是的..所有文件都在那里。 Timer 是 maltab 运行时的一部分 可能是程序正常退出。与 MATLAB 命令行不同,一旦程序完成,没有什么可以让计时器保持活动状态。 【参考方案1】:

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

wait(t);

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

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

【讨论】:

以上是关于Matlab 计时器在独立应用程序中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

调用 invalidate() 时计时器在 Android 中不起作用

CORS 在独立的 tomcat 中不起作用

@font-face 在 Firefox 中不起作用 [重复]

Serilog 在 Reliable Actor Services 中不起作用

AngularJS、SweetAlert.js 在自定义指令中不起作用

for循环在matlab中不起作用