2011-09-01 7 views
5

スレッドを無期限にスリープ状態にしたいと思っています。なぜなら、私のプログラムは信号を受信して​​プライマリスレッドで何もしないときにのみ動作するからです。したがって、すべての処理はシグナルハンドラ内で行われます。どのくらい無期限に寝ることができますか?Linuxで無期限にスレッドをスリープします。

+2

実際にスレッドを使用していますか、シグナルだけですか?スレッドの場合は、他のスレッドとは何ですか? (シグナルとスレッドを混在させる場合は余分な作業が必要ですが、シグナルハンドラでは実行されていないプログラムの部分を意味する「プライマリスレッド」を使用しているのであれば、それは異なっており、答え) – Random832

答えて

12

私はあなたがpause機能を探していると信じて:あなたは何ができる

http://pubs.opengroup.org/onlinepubs/9699919799/functions/pause.html

何かのように:for (;;) pause();

+0

うん、一時停止はそれです。 – MarkR

+0

無限ループの必要はありません。 'pause();'だけを使用してください。 – boramalper

+1

@boramalper: 'pause'がシグナルを返すので、ループが必要です。 –

8

あなたが別のスレッドで何かをしているのであれば、そのスレッドでpthread_joinと呼ぶだけで、かなり永遠にブロックされます。条件変数を使用して同じ効果を達成できます。

+0

私はChrisに同意します。彼はメインスレッドが子スレッドが終了するのを待ってから、それを終了することを提案しています。これは、あなたが望むだけでなく、子スレッドが死んだり死んだらゾンビを防ぎます。 –

+0

それはすばらしい解決策です、クリス!ありがとう! – MetallicPriest

+1

スレッドは殺すことができず、プロセスと同じ意味で「ゾンビ」になることはありません。スレッドに参加する気にならない場合は、単にスレッドをデタッチしてスレッド記述子のクリーンアップを心配する必要はありません。 –

4

セマフォを使用してください!

sem_waitを使用してスレッドをセマフォでブロックしてください。スレッドをスリープ解除するには、別のスレッドのsem_postを使用してセマフォを通知する必要があります。

1

POSIXは、信号を待つsigsuspend機能を提供します。 (別の回答に記載されているように、pauseも同様です)

関連する問題