从 MFC 中的工作线程调用 Beginwaitcursor 函数

Posted

技术标签:

【中文标题】从 MFC 中的工作线程调用 Beginwaitcursor 函数【英文标题】:calling Beginwaitcursor function from worker thread in MFC 【发布时间】:2016-02-08 13:54:43 【问题描述】:

有人可以帮助我理解 VC++(MFC) 中的工作线程吗? 以下是我的工作线程函数

UINT ThreadFunc(LPVOID pParam)

// some initialization... etc..

AfxGetApp()->BeginWaitCursor();

...
..
/// some operations

AfxGetApp()->End WaitCursor();


可以从工作线程调用 WaitCursor() 函数吗?

【问题讨论】:

“没问题”,但不会达到预期的效果。 UI 线程将立即更改它们。更好的解决方案是在窗口/对话框本身上显示一个控件,指示后台正在发生某些事情。 在 MFC 中你可以使用CWaitCursor x; 并且当x 超出范围时完成。然而,由于前面解释过的原因,它在这里仍然没有做任何事情。 【参考方案1】:

BeginWaitCursorEndWaitCursor 的可用文档未提及与线程相关的问题。

提到的一件事,

BeginWaitCursor 的操作在单个消息处理程序之外并不总是有效,因为其他操作(例如 OnSetCursor 处理)可能会更改光标。

当您的工作线程工作时,其他线程也可以更改光标。

如果将ON_WM_SETCURSOR() 宏添加到CWnd 派生类的消息映射中,您还需要考虑处理WM_SETCURSOR 消息的CWnd 消息处理程序OnSetCursor() 的操作。见Prevent MFC application to change cursor back to default icon

【讨论】:

以上是关于从 MFC 中的工作线程调用 Beginwaitcursor 函数的主要内容,如果未能解决你的问题,请参考以下文章

是否有可能/有必要在单独的线程中调用 OnDraw [MFC]

如何从工作线程访问 MFC 控件?

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

在 MFC 中不断增加进度条

c ++ MFC从工作线程设置/附加文本到richedit控件

MFC_Thread