次のような状況があります。
fread 呼び出しでデバイスから読み取るスレッドがあります。デバイスからデータが送信されない限り、この呼び出しはブロックされます。このスレッドを停止すると、このスレッド内にぶら下がったままになります。
今、freadのmanページ内で次のことを見つけました:
エラー
単一 UNIX 仕様に準拠するすべてのシステムで、fread() 関数は、次の条件にリストされているように errno を設定します。
[EINTR] シグナルの受信により読み取り操作が終了し、データは転送されませんでした。
これは、別のスレッドからの呼び出しを中断する方法があることを意味します。しかし、方法がわかりません。fread コールを中断する信号を送信する方法を教えてもらえますか? そして、私が送信する必要がある信号は何ですか?
更新 08-10-10 09:25
私はまだそれを機能させていません。kill() と pthread_kill() を異なるシグナルで試しました。しかし、 fread() 呼び出しを中断するものはないようです。私が機能した唯一のことは、アプリケーション全体を強制終了することですが、それは私が望んでいることではありません。