我目前正在使用三个 matlab 函数使它们在单个 Matlab session 中几乎同时运行(因为我知道 matlab 是单线程的),这三个函数分配有单独的任务,我可能很难解释所有在这里详细介绍每个功能,但尽量包含尽可能多的信息。
它们是 CONTROL/CAMERA/DATA_DISPLAY 任务,我使用的方法是创建 Timer 对象,让所有函数连续回调,回调周期不同。
- CONTROL 会通过 udp 端口通过 wifi 发送和接收数据,它会检查包的可用性,并不断执行回调
- CAMERA通过tcp不断接收camera frame并显示,一个timer object T1用于此功能刷新capture frame
- DATA_DISPLAY 显示所有接收到的数据,这个会不断刷新,所以这个功能的另一个定时器T2来刷新显示
但是我注意到定时器 T2 在执行时阻塞了定时器 T1,并减慢了整个过程。我正在使用多核 CPU 的系统上工作,我希望 MATLAB 能够利用计算核心并行执行两个计时器对象。
查了一下matlab的并行计算工具箱,似乎不能处理无限循环或者连续回调,因为代码执行完不会执行完,什么都不显示,可能我不太清楚这个工具箱怎么用
或者任何人都可以提供任何将代码重组为更高效结构的好主意。
非常感谢
最佳答案
我在这里使用并行计算工具箱时遇到问题。该设计意味着作业是通过您的主要 matlab 实例控制的。除此之外,主实例是唯一具有图形用户界面的实例,这需要让您的 DISPLAY_DATA-Task 控制一切。我不知道这是否可能,但它会导致一个非常奇怪的架构。除此之外,进程间通信在处理大量数据时并不是最好的主意。
为了解决这个问题,我会使用 Java 来显示您的数据并实现“DISPLAY_DATA”部分。与java的连接非常快速且易于使用。您将不得不编写一个小型 Java 图形用户界面,它具有一个 appendframe
-函数,允许您的 CAMERA
-Job 推送新数据。显然,更新 gui 应该并行进行而不阻塞。
关于multithreading - 让 MATLAB 运行包含无限循环的多个独立函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22269555/