在多线程环境中对代码进行排序

时间:2014-10-17 23:13:58

标签: c++ multithreading concurrency mfc stdthread

我有一个多线程C ++ MFC应用程序。我有一个工作线程来执行我的程序逻辑,主线程专门用于处理GUI事件。 GUI线程产生程序逻辑线程,并从中分离执行,如下所示 -

void CMyDocument::InGUIThread()
{
    std::thread tProgramLogic(programLogicThreadFunction);
    tProgramLogic.detach()
}

我的程序逻辑大约需要5分钟才能执行。

这是我的问题:我想在程序逻辑完成执行后调用主GUI线程中的函数。当接近执行结束时,如何从programLogic线程发出主线程的信号?

P.S。我分离我的programLogic线程的原因是我不冻结我的主线程,因此它响应GUI事件。

1 个答案:

答案 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()
当您的逻辑线程以

结束到主窗口时,

2)Post WM_MYMSG

3)处理ThreadHasFinished

中的逻辑终止
相关问题