繁体   English   中英

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

[英]Sequencing code in a multithreaded environment

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

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

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

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

PS分离我的programLogic线程的原因是为了不冻结我的主线程,因此它可以响应GUI事件。

您可以使用C ++ 11 async解决方案并使用wait_for轮询结果,但是在您的特定情况下(在Windows环境中),我将寻求更好的解决方案:

1)定义一个自定义WM_消息并将其映射以进行处理,例如

 #define WM_MYMSG (WM_USER + 42)
 BEGIN_MESSAGE_MAP(CMyApp, CWinApp)
     ON_MESSAGE(WM_MYMSG, ThreadHasFinished)
 END_MESSAGE_MAP()

2)当您的逻辑线程结束到主窗口时, 发布WM_MYMSG

3)在ThreadHasFinished处理逻辑的终止

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM