在 MFC 中,可以在工作线程中执行 UI 相关操作(绘制绘图)吗?

Posted

技术标签:

【中文标题】在 MFC 中,可以在工作线程中执行 UI 相关操作(绘制绘图)吗?【英文标题】:In MFC the UI related operation (Draw paint) can be performed in worked thread? 【发布时间】:2015-06-17 01:34:54 【问题描述】:

在 MFC 中,与 UI 相关的操作(绘图)可以在工作线程中执行吗?我的问题是,到目前为止,主线程在绘制 UI 相关项目时花费了大量时间。但是,如果我可以将与 UI 绘图相关的操作逐节委托给工作线程,则主线程将变得空闲,以便用户可以使用完成绘图的应用程序的其余部分。这可能吗?

【问题讨论】:

【参考方案1】:

你应该做相反的事情。 一般来说,主应用程序线程应该只用于 GUI 的东西,因为它默认具有 Windows 消息泵。其余的工作应该在线程中完成。

【讨论】:

谢谢安德鲁。但在我的情况下,要求略有不同。有多个窗口。因此,一旦第一个寡妇完成绘图,如果工作线程可以为其他窗口完成绘图部分,那么主线程将变得空闲,最终用户可以开始与第一个窗口进行交互,而其他窗口仍处于加载状态。有什么解决办法吗? 不。绘图只能在主线程中完成。否则你最终会遇到消息泵问题。 谢谢安德鲁。我还有其他方法可以满足我的要求吗? 我需要有关您的应用的更多信息,以便为您提供建议。我假设您可以将加载/渲染/计算部分放入线程中。当这些任务正在进行时,主 GUI 线程可以跟踪它们的完成状态并使用 CProgressCtrl 显示它

以上是关于在 MFC 中,可以在工作线程中执行 UI 相关操作(绘制绘图)吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CWinThread 在 MFC 中创建工作线程?

MFC 线程创建方式

MFC 线程创建方式

[转]MFC子线程中更新控件内容的两种办法

MFC - 获取特定窗口的设备上下文

未调用 MFC 的 CWinThread::PostThreadMessage 处理程序