我创建了一个计时器,每0.1秒执行一次。它调用一个函数,该函数读取数据,然后更新对象的属性。当我启动计时器时,MATLAB在命令窗口的底部显示"忙"信号。 MATLAB变得无响应,我无法使用stop()函数暂停计时器。我唯一的办法是使用Ctrl-C。
我确定问题是计时器回调函数的处理时间长于调用周期,并且我认为没有其他MATLAB代码会挤入堆栈/队列中。这使我有点担心依赖计时器。我的目标是连续从多个设备进行测量,将其存储在一个对象中,并需要MATLAB在这些测量之间进行其他操作。另外,我不能错过任何一项测量。
我正在创建一个响应用户输入并为用户提供实时信息的应用程序,因此我选择了一个快速的时期,认为它将产生快速的用户体验。由于我致力于使用MATLAB,因此我想不出比使用计时器对象更好的方法来实现此功能。所以第一个问题是,计时器对象看起来像是我上面描述的工作的正确工具吗?
其次,如果我要使用计时器对象,是否有人可以分享使用计时器的常见错误或陷阱的经验?或者有人对如何最好地实现计时器对象有任何建议?可以同时使用的计时器对象的数量是否有实际限制?确定计时器对象最佳频率的最佳方法是什么?
谢谢!
我认为0.1秒钟将其推向更高的可靠性,尤其是当您同时运行多个计时器时,尤其是希望用户界面也同时响应时。
MATLAB基本上是单线程的。也有例外,例如较低级别的数学例程以多线程方式调用BLAS,从而大大提高了速度。您也可以用多线程C编写MEX代码,然后从MATLAB调用它。但是,基本上所有代码都在一个真正的线程上运行。
计时器对象在某种程度上也是一个例外。创建计时器对象时,在其下方有一个Ja