我有一个多线程C ++ MFC应用程序。我有一个工作线程来执行我的程序逻辑,主线程专门用于处理GUI事件。 GUI线程产生程序逻辑线程,并从中分离执行,如下所示 -
void CMyDocument::InGUIThread()
{
std::thread tProgramLogic(programLogicThreadFunction);
tProgramLogic.detach()
}
我的程序逻辑大约需要5分钟才能执行。
这是我的问题:我想在程序逻辑完成执行后调用主GUI线程中的函数。当接近执行结束时,如何从programLogic线程发出主线程的信号?
P.S。我分离我的programLogic线程的原因是我不冻结我的主线程,因此它响应GUI事件。
答案 0 :(得分:2)
您可以使用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()
当您的逻辑线程以结束到主窗口时, 3)处理ThreadHasFinished