2

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

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

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

4

2 回答 2

1

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

如果不尝试处理这类事情,MFC 编程就已经够难了。而是使用 PostMessage 将 UI 相关的处理放到主线程上。

于 2013-08-27T12:33:49.580 回答
1

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

如果我没记错的话,作者几乎说的和你说的一样,如果你在正确的地方有关键部分,你可以使访问 GUI 线程安全。MFC 自己不这样做的原因是出于性能原因。

于 2013-08-29T16:30:56.593 回答