2008-09-30 38 views

回答

0

也許你想發出一個信號?

我真的很喜歡Qt的信號和插槽功能,我知道Boost也有信號/插槽。不過,我從來沒有使用Boost中的信號/插槽。

+0

唯一的問題是,這可能不會異步工作,如果這樣做,那麼它可能需要一個事件循環設置爲「發佈」信號到循環。否則,你會回到只是把它扔在一個線程上,忘記它。 – 2008-10-01 03:34:56

3

那麼你可以旋轉一個線程,然後再不加入它。喜歡的東西:

boost::thread some_thread(&SomeFunction, param1, param2); 

一旦some_thread變量超出範圍,執行的線程會單獨將無法再次加入。除非這個函數的處理時間是重要的,否則加速一個線程是浪費。

3

我沒有使用過的boost ::線程一段時間,但我看到的documentation page for the class一個簡單的例子:

void find_the_question(int the_answer); 

boost::thread deep_thought_2(find_the_question,42); 

我只要它完成的功能相信,該線程將退出。這可能不是你想要的,一旦線程超出範圍,它將被銷燬。如果這不起作用,您可能需要創建一個長時間運行的線程池,然後將您的函數作爲boost :: bind組合傳遞。

1

根據您這樣做的頻率,您最好創建一個線程池以及一個工作隊列。如果你想每秒鐘做幾十次,創建一個線程會產生很多開銷。如果你不關心返回值,那就很容易。

旋轉一個或兩個(或十個)線程;有一個線程安全的函數隊列調用(將參數綁定到函數並將其放入隊列中);線程在隊列中等待顯示某些內容,第一個要喚醒的線程將處理該工作。當一個線程完成一項任務時,它會再次等待隊列。

看一看this project就可以瞭解一種方法。

當然,如果您只是每隔幾秒就會調用一次異步調用來提高UI的響應速度,那麼每次只啓動一個新線程會更容易。