工作者和UI线程之间的有效通信

时间:2011-12-02 01:17:29

标签: multithreading

我正在设计显示从多个传感器获取的图形或图像的实时Windows应用程序。我分配了一个线程,用于从每个传感器获取数据,以及每个显示器的UI线程。根据MSDN,我可以使用PostThreadMessage向另一个线程发送消息。

听起来不错,但在我的架构中,工作线程需要发送大量信息,如图像。所以我认为我不能使用PostThreadMessage将单个大图像数据发送到UI线程,因为工作线程必须保存该数据,直到相应的UI线程处理它为止。

如果是这样,将大量数据从工作线程发送到UI线程的最佳方法是什么?

  1. 我考虑将其保存为文件,但我确信它可能是一个很大的瓶颈,因为它需要非常快速地处理数据。

  2. 我的一个想法是,当您从工作线程发送消息时,发送非常小的部分,例如几行图像。

  3. 任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

我的评论作为答案: 正如jeffamaphone所写,使用指向内存的指针而不是复制一切。这就是线程的优势 - 共享内存 - 不要浪费它。 将映像内存释放到ui线程,并为工作线程中的下一个映像分配新内存。因此工作线程不必等到ui-thread完成图像。需要更多内存,但不需要复制或长时间等待。

可能会有一些改进,可以减少你必须进行的分配数量,但它们非常繁琐 - 并且它们确实可以提高性能,因为它们会重新引入某种同步,这是非常可靠的。所以我会像我建议的那样继续实施它,如果你注意到内存分配量是一个性能瓶颈,你/我们可以重新考虑这个问题。