簡體   English   中英

我如何知道是否完成了增強螺紋?

[英]How do I know if a boost thread is done?

我使用boost :: thread來處理隊列中的消息。 當第一條消息出現時,我啟動了一個消息處理線程。 當第二條消息出現時,我檢查消息處理線程是否完成。

如果它完成了我開始一個新的如果它沒有完成我什么都不做。

我怎么知道線程是否完成? 我嘗試使用joinable()但它不起作用,因為當線程完成時,它仍然可以連接。

我也試圖立即中斷進程,並在我的線程末尾添加一個中斷點,但它沒有用。

謝謝

編輯:

我想讓我的線程在不確定的時間內休眠,並在觸發信號時喚醒。

這樣做的意思是boost :: condition_variable

據我所知,你應該使用join()方法等待線程執行的結束。 你可以使用timed_join()超時使用它。

您可以使用interrupt()中斷線程。 在這種情況下,如果執行到達中斷點(boost :: this_thread :: sleep()或boost :: this_thread :: interruption_point()),則在線程內部將發生異常。 您在線程內捕獲異常,然后可以關閉它。

為每個傳入消息生成一個新線程是非常低效的。 你應該看看線程池模式

編輯:

對不起,jules,我誤解了你的問題。 我建議你看一下生產者 - 消費者模式。 查看本文 ,了解如何使用boost條件變量滾動自己的阻塞隊列。 英特爾的線程構建模塊也有阻塞隊列實現。

查看有關現有無鎖隊列實現的SO 問題

希望這可以幫助。

您是否嘗試使用boost :: this_thread :: get_id()檢查get_id()。 如果匹配則線程不存在。 但只有退出線程才會發生這種情況。

暫無
暫無

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

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