我对在单独的功能单元(很可能是线程?)中组织代码有一个小小的架构疑问。正在开发的应用程序应该执行以下任务:
- 在屏幕上显示一些图像(即幻灯片)
- 通过USB接口(interface)从外部设备读取数据
- 将接收到的数据与相应的图像(刺激)进行匹配
- 做一些数据分析
- 绘制数据分析结果
我的想法是将应用程序组织成以下模块:
- GUI 线程(+ 图片幻灯片)
- USB 线程缓冲接收到的数据
- 用于分析/绘制数据的线程(绘制数据时不应阻塞主 GUI 线程,这可能会消耗更多时间)
那么,您一般如何看待这个概念?您认为还有其他什么可能更适合这种特定情况吗?
最佳答案
您可能可以将 1 和 2 结合起来,因为幻灯片放映功能本质上是面向图形用户界面的。
对于 #3,您可以使用某种异步 I/O 方法,这样您就不需要专用轮询线程。不确定你是否可以用 USB 做到这一点,但你肯定可以通过串行和网络接口(interface)获得异步 I/O,所以值得研究。
将重量级任务(如 4 和 5)移到它们自己的线程中可能是个好主意。如果您没有同时进行分析和绘图,则可能两者都有一个线程。但是,您真的应该考虑这些事件需要多少 CPU 时间。如果最坏情况的分析和绘图花费的时间远少于半秒,您甚至可以通过 gui 的调用来执行这些操作。相反,如果在某些情况下这需要比这更长的时间,则最好使用单独的线程,因为您的用户不会喜欢滞后的图形用户界面。
请记住,线程的阴暗面在于协调它们不可避免的挑战。
关于c++ - 多线程应用程序概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2367911/