[英]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.