簡體   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