0
  • 別のスレッド(pthread)でQTcpSocketのwaitForReadyReadメソッドを呼び出しています。
  • これで、ソケットがメインスレッドから閉じられると、アプリケーションがwaitForReadyReadメソッドでクラッシュします。

そして、タイムアウト=-1でwaitForReadyReadを使用しています。

また、実装でqtシグナルスロットメカニズムを使用できません

誰かが上記の実装の何が問題になっているのか説明してください

4

1 に答える 1

0

QTcpThreadのQtドキュメントから:

注:このクラスのすべての関数は再入可能です。

これは、複数のスレッドから1つのオブジェクトを呼び出すことは安全ではないことを意味します(詳細については、これをお読みください)。コードを何らかの方法で機能させたとしても、古いバージョンまたは新しいバージョンではクラッシュする可能性があります。

シグナル/スロットを実際に使用できない場合は、接続を閉じて、タイムアウトのあるループでwaitForReadyReadを呼び出すときにフラグを設定できます。次に、フラグをポーリングし、設定されている場合はwaitForReadyRead-threadを使用してソケットを閉じることができます。

于 2013-01-29T16:09:31.017 に答える