c++ - 多线程应用程序概念

标签 c++ multithreading winapi

我对在单独的功能单元(很可能是线程?)中组织代码有一个小小的架构疑问。正在开发的应用程序应该执行以下任务:

  1. 在屏幕上显示一些图像(即幻灯片)
  2. 通过USB接口(interface)从外部设备读取数据
  3. 将接收到的数据与相应的图像(刺激)进行匹配
  4. 做一些数据分析
  5. 绘制数据分析结果

我的想法是将应用程序组织成以下模块:

  1. GUI 线程(+ 图片幻灯片)
  2. USB 线程缓冲接收到的数据
  3. 用于分析/绘制数据的线程(绘制数据时不应阻塞主 GUI 线程,这可能会消耗更多时间)

那么,您一般如何看待这个概念?您认为还有其他什么可能更适合这种特定情况吗?

最佳答案

您可能可以将 1 和 2 结合起来,因为幻灯片放映功能本质上是面向图形用户界面的。

对于 #3,您可以使用某种异步 I/O 方法,这样您就不需要专用轮询线程。不确定你是否可以用 USB 做到这一点,但你肯定可以通过串行和网络接口(interface)获得异步 I/O,所以值得研究。

将重量级任务(如 4 和 5)移到它们自己的线程中可能是个好主意。如果您没有同时进行分析和绘图,则可能两者都有一个线程。但是,您真的应该考虑这些事件需要多少 CPU 时间。如果最坏情况的分析和绘图花费的时间远少于半秒,您甚至可以通过 gui 的调用来执行这些操作。相反,如果在某些情况下这需要比这更长的时间,则最好使用单独的线程,因为您的用户不会喜欢滞后的图形用户界面。

请记住,线程的阴暗面在于协调它们不可避免的挑战。

关于c++ - 多线程应用程序概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2367911/

相关文章:

c++错误表示数字适合 double

C++ 不允许指向不完整类类型的指针

multithreading - 向条件变量发送信号时必须保持锁定吗?

java - synchronized 方法不将 int 作为其有效参数?

c# - 以编程方式从 PC 识别连接的设备是否为 Android

c# - 以 ^Bo 开头的字符串

c++ - RegSetValueEx 只显示写入第一个字符

c# - 枚举器中的多线程

c++ - 我可以使用 %p 说明符输出 Windows 句柄吗?

windows - 如何在win32中将硬件ascii翻译成硬件扫描码