2010-04-03 78 views
2

我拥有一个ChildView拥有一个工作线程。 (我打算最终将其移至Doc)。当工作线程完成任务时,我希望所有视图都得到更新。我如何打电话告诉Doc发行UpdateAllViews()?还是有更好的方法?工作线程内的UpdateAllViews()?

谢谢。


由OP补充:我要寻找一个简单的解决方案。该应用程序运行在单个用户,单CPU电脑上,不需要网络(或Internet)访问。没有什么会导致僵局。

我想我想让工作线程发布(或发送)一条消息,以使视图更新。

我所读到的有关线程的一切似乎都比我需要的复杂得多 - 而且,我明白所有这些预防措施对于在多处理器,多用户,客户端 - 服务器系统等中运行的应用程序都是必需的。那些适用于我的情况。

我只是得到正确的组合获取窗口句柄,张贴消息和响应正确的函数和类中的消息编译和功能。

+0

@Harvey:多线程不局限于多处理器/核心,多用户或客户端 - 服务器系统,你可以为陷入死锁甚至只要有多个线程和处理线程间通信时,最简单的情况就是如此。但是你想发布消息到GUI更新的主线程是好的(在工作线程中使用PostMessage,而不是SendMessage!)。这里是另一个有用的答案,与你非常密切相关的问题:http://stackoverflow.com/questions/391125/how-to-change-pane-text-of-status-bar-from-a-thread-in- mfc – Slauma 2010-04-08 00:11:09

回答

2

UpdateAllViews不是线程安全的,因此您需要将调用编组到主线程。 我建议你signal a manual-reset event在WM_TIMER处理程序中标记你的线程的完成和check the event's status

推荐阅读:

+0

请参阅添加注释。 – Harvey 2010-04-04 00:47:34

+0

@盛,谢谢。我现在有信息发布工作。即使我没有这样做,我会接受你的答案来解决这个问题。再次感谢。 – Harvey 2010-04-04 03:31:54