簡體   English   中英

我如何知道線程是否在C ++中停止?

[英]How do I know if a thread stopped in C++?

我進行了測試,制作了一個用於模擬下載的進度條。 顯示ProgressBar時開始下載。

void CProgressBarTest::DoDataExchange(CDataExchange* pDX)
{
...
    auto funDownloadCallback = [&](int i)->int {
        if (m_downloadStopFlag)
        {
            return -1;
        }
        m_progress_bar.SetPos(i);
        return i;
    };
    std::thread thDownload(__HeavyWork::SimulateDownload, funDownloadCallback);
    thDownload.swap(m_thDownload);
}

單擊取消按鈕或關閉窗口時停止下載。

void CProgressBarTest::OnClose()
{
    m_downloadStopFlag = true;
    m_thDownload.join();//How do I know if the thread alread stopped. If the thread stopped, it would crash.
    CDialog::OnClose();
}

在這里,我使用一個標志(m_downloadStopFlag)告訴線程停止。 並使用m_thDownload.join(); 等待線程停止。 停止下載工作正常。

但是,如果我等待下載完成(線程也完成了),則關閉此對話框,仍然會調用m_thDownload.join(); 導致崩潰。

我如何知道線程是否完成,然后可以跳過m_thDownload.join();

如果線程已經完成, join不會引發異常,它僅在已經調用join或線程從未啟動時引發,您可以使用joinable檢測這些條件。 以下內容永遠不會引發join異常:

if (thread.joinable())
{
  thread.join();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM