MFC:从另一个线程访问GUI?

时间:2013-08-27 09:57:56

标签: c++ mfc

因此通常只有主线程才能访问MFC应用程序中的GUI。

然而,这是法律还是只是推荐?如果我通过关键部分确保只有一个线程访问GUI中的某个对象,那么它可以吗?或者如果MAIN线程访问GUI的一部分而另一个线程访问一个部分,则是一个问题。即使这两个对象不相互影响?

我问的原因是因为如果我可以从另一个线程访问GUI,这会简化我对应用程序的重写。

2 个答案:

答案 0 :(得分:1)

不要这样做。如果你这样做,你将生活在一个ASSERT世界和奇怪的行为中。 GUI通过Windows消息系统工作,这些消息被“泵送”。在主线程上。如果您开始在另一个线程中修改UI,您将遇到操作导致其他UI消息的情况,这些消息将由主线程处理,同时您仍在尝试访问另一个UI上的UI线程。

MFC编程很难,而不试图处理这类事情。而是使用PostMessage将UI相关处理放到主线程上。

答案 1 :(得分:1)

我曾经认为它几乎被禁止从MFC中的工作线程访问GUI,这是一个灾难的处方。但是最近我了解到,如果你知道自己在做什么,这并不是一个很难的规则,你可以使用工作线程来访问GUI。在Win32 Multithreaded Book中,提供了一个完全在工作线程中绘制的“自动动画控件”的示例。

如果我没记错的话,作者几乎说了同样的话,如果你在合适的地方有关键部分,你就可以安全地访问GUI线程。 MFC本身不这样做的原因是出于性能原因。