0

ソケットから読み取り、利用可能なデータがあるときに信号 (QT 信号) を送信する QThread があります。これは read(2) をブロックすることで簡単ですが、あまり長く待たずに外部からスレッドを停止できるようにする必要があります。

pthread を使用していた場合は pselect と を使用しますpthread_kill(thread_id, some_signal)が、QThread には同様のメソッドがないようです。そして、このプロジェクトに pthread への依存関係を追加することは、エレガントに見えません。

また、比較的短いタイムアウトでソケットから常に読み取ろうとするような他の醜い方法も使用したくありません。

編集: ソケットは TCP ではなく、Bluetooth L2CAP です。

4

3 に答える 3

1

あまりにもエレガントではありませんが、シンプルで実用的な解決策: パイプを作成し、パイプまたはソケットのいずれかを選択して待機させます。このようにして、パイプに何かを書き込むことで、いつでも待機を停止できます。

于 2010-09-08T13:07:05.690 に答える
1

スレッド化を自分で処理する代わりに、QTcpSocket の非同期インターフェイスを使用できます。Fortune クライアントの例をご覧ください。

于 2010-09-07T14:11:40.440 に答える
0

terminate()QThreadのスロットにシグナルを送信できます。これにより、OSのスケジューリングポリシーに従ってスレッドが停止します。

于 2010-09-07T13:43:48.467 に答える