2011-09-01 13 views
5

我希望讓一個線程睡眠時間不定數量不定的時間量。我想這樣做的原因是因爲我的程序只在接收到信號時才採取行動,並且在主線程中無關。因此,所有的處理都是在信號處理程序內完成的。我該如何無限期地睡覺?睡一個線程在Linux中

+2

你實際上是使用線程還是隻是信號?如果線程,其他線程是什麼,他們在做什麼? (如果混合信號和線程有一些額外的工作要做,但是如果你只是使用「主線程」來表示程序中沒有在信號處理程序中執行的部分,那就不同了,並且意味着不同回答) – Random832

回答

8

如果你只是做一些在另一個線程,只需調用該線程pthread_join,它會非常塊「永遠」。您可以使用條件變量實現相同的效果。

+0

我同意克里斯。他建議你有主線程等待子線程退出,然後退出。這不僅會做你想做的,但如果孩子的線程死亡或死亡,防止殭屍。 –

+0

這是一個絕妙的解決方案,克里斯!謝謝! – MetallicPriest

+1

線程無法被殺死,並且不會像進程一樣成爲「殭屍」。如果你不關心加入一個線程,只需將它分離開始,這樣你就不必擔心清理線程描述符。 –

4

使用信號燈!

必須使用sem_wait阻塞信號量的線程。一旦你需要通過使用另一個線程中的sem_post來喚醒你的線程信號燈信號。

1

POSIX提供sigsuspend函數等待的信號。 (正如在另一個回答中提到的,pause也適用。)