我有一个多线程 C++ MFC 应用程序。我有一个工作线程来执行我的程序逻辑,主线程专用于处理 GUI 事件。 GUI 线程生成程序逻辑线程,并从中分离执行,就像这样 -
void CMyDocument::InGUIThread()
{
std::thread tProgramLogic(programLogicThreadFunction);
tProgramLogic.detach()
}
我的程序逻辑执行大约需要 5 分钟。
这是我的问题:我想在我的程序逻辑执行完毕后在主 GUI 线程中调用一个函数。如何在 programLogic 线程接近执行结束时向我的主线程发出信号?
附言我分离我的 programLogic 线程的原因是我不会卡住我的主线程,因此它可以响应 GUI 事件。
最佳答案
您可以使用 C++11 async
解决方案并使用 wait_for 轮询结果,但在您的特定情况下(在 Windows 环境中),我会寻求更好的解决方案:
1) 定义a custom WM_
message并将其映射以进行处理,例如
#define WM_MYMSG (WM_USER + 42)
BEGIN_MESSAGE_MAP(CMyApp, CWinApp)
ON_MESSAGE(WM_MYMSG, ThreadHasFinished)
END_MESSAGE_MAP()
2) Post WM_MYMSG当您的逻辑线程以
结束到主窗口时3) 在ThreadHasFinished
关于c++ - 在多线程环境中对代码进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26434649/