0

udp ソケットを使用してデータグラムをループで読み書きする qthread があります。QUDPSocket はメインスレッドで作成されます。QThread とメインスレッドの両方で使用する QObjects を処理するにはどうすればよいですか。また、メインスレッドで UDP ソケットを使用し、それを qthread で使用しても問題ありませんか?

4

1 に答える 1

2

通常、各 QObject を処理できるスレッドは 1 つだけにする必要があります。この場合、おそらく QThread に QUDPSocket を保持させて使用させ、メインスレッドがそれに触れないようにしたいと思うでしょう (理想的には、メインスレッドは QUDPSocket へのポインターを保持することさえすべきではありません。間違ったスレッドから誤ってメソッドを呼び出すことを忘れてしまう可能性があります)。

QThread が UDP データを読み取ると、初期処理を実行してから、QApplication::postEvent() またはキューに入れられたシグナル/スロット接続を介してメイン スレッドにデータを渡すことができます。

同様に、メインスレッドに UDP パケットとして送信したいデータがある場合、QUDPSocket オブジェクトで write() を直接呼び出すべきではありません。代わりに、(postEvent() またはキューに入れられたシグナルを介して) QThread に通知し、QThread に処理させる必要があります。

于 2010-02-24T23:15:51.700 に答える