【问题标题】:MFC: accessing GUI from another thread?MFC:从另一个线程访问 GUI?
【发布时间】:2013-08-27 09:57:55
【问题描述】:

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

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

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

【问题讨论】:

  • 你能出示你的代码吗?
  • 你想访问 GUI 或其他东西的控件??
  • 并不是 Windows 强加了这个法则,而是所有的 other 代码对非线程安全的窗口做一些事情。包括 MFC。加上你不知道的代码,比如钩子。从工作线程更新窗口会流泪。

标签: c++ mfc


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-15
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多