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