2012-04-15 10 views
1

私はpthreadマルチスレッドコードで作業しており、各スレッドはファイル記述子でread()を呼び出しています。 read()はブロッキング呼び出しであり、データを待機します。しかし、私はそれがデータを待つために3秒間だけ待つことを望む。setTimeOut cに相当しますか?

私はalarm()とhadling SIGALRMを使用すると考えましたが、あるスレッドでアラームを発生させると、すべてのスレッドはそのSIGALRMシグナルを受け取り、すべてが読み込みを放棄します。どうすればいいですか?

答えて

5

selectを使用してください。タイムアウトを指定できる1つの引数があります。

selectのLinuxのマニュアルページには、サンプルの使用方法があります。ここでは、多くの例がWeb上にあります。

移植性が心配されていない場合は、より現代的な/機能豊富なオプションがあります。

はあなたが出て、すべてのことを抽象化するライブラリに見たいと思うかもしれません。 libeventは一見価値があり、上記のOS特有のインターフェイスの大部分を包みます。

+0

selectは非推奨です。 epollは最近人々が使っているものです。 –

+0

ああ、私はこれがうまくいくと思います。私は前にselect()の使用を考えたことはありません。私は多重化以外のものについては決してselect()とは考えていませんでした。 –

+0

@VladLazarenko: "廃止予定"はそのための強力な言葉です。 'epoll'は移植可能ではなく、すぐに' select'が離れることはありません。確かに現代的な選択肢が増えていますが、(IMO)しばしば正しい方向に進むのは難しいことです。 – Mat

関連する問題