我正在尝试在Matlab中实现一个高精度的毫秒级时间计时器。每隔T秒,我要查询一个链接到matlab的相机,如果内存中有图像,我想将其拉出。到相机的实际连接很简单-但是会出现问题,因为每隔60毫秒就会出现一次图像,因此必须先将所有图像拉出,然后再将另一张图像进入相机缓冲区。从本质上讲,这意味着我需要至少每隔30毫秒,最好是每隔5毫秒检查一次相机缓冲区。
虽然MATLAB内置的timer函数表面上允许毫秒级的计时,但精度却很差。在执行次数超过95%的情况下,内置的MATLAB计时器确实会在两次运行之间暂停约5毫秒,而在大约5%的情况下,它会徘徊在约30毫秒左右,而在大约1%的情况下,两次执行之间的花费会超过100毫秒,这会导致无法接受的终止表演。我应该在MATLAB的辩护中阐明,同时运行另外两个计时器(两个周期均为1 s),同时打开多个图形窗口,因此即使我的机器很强大(16核,64GB RAM),也有一次要做的事情肯定很多。我尝试过使用基于.NET计时器(System.Timers.Timer(period))以及Java睡眠函数(java.lang.Thread.sleep(period))的计时器,从理论上讲,这两个计时器都应该更精确,并且两者都比MATLAB计时器更好(代价),没有人能够在数千次迭代中始终实现<60ms的执行延迟。
也许我要问一些无法实现的事情-但我希望有某种方法可以在MATLAB中实现高精度计时器,即使存在其他数字/计时器/,该计时器也将以ms时标继续执行。半同时执行命令。我也许应该澄清一下,当只运行一个计时器而没有打开其他计时器/数字时,我能够始终如一地实现<60ms执行(实际上,在5ms的计时器周期内始终实现<10ms的执行)。即使所有这些计时器/数字在不同的MATLAB实例中打开,这也是可能的,因此似乎问题在于如何将计时器与MATLAB的其余部分分开。在这方面,任何建议或指导将不胜感激。