2

QTcpSocket がその記述子を解放して、ソケットの所有権を別のスレッドの別の QTcpSocket オブジェクトまたは QSslSocket に、ソケットを閉じたり中断したりせずに転送できるようにすることは可能ですか?

socket1.setDescriptor(descriptor);

// .....

descriptor = socket1.descriptor();
socket1.release();                       // <--- Is there a way to do this?
socket2.setSocketDescriptor(descriptor);
4

1 に答える 1

2

いいえ、一度割り当てられたソケット記述子を解放することはできませんQTcpSocket

しかし、あなたがそうする必要があるかどうかはわかりません。はQTcpSocket通常、 を使用して別のスレッドに移動できますmoveToThread。制約は、移動した と同じQObjectです。

  • moveToThreadオブジェクトが現在属しているスレッド内で呼び出す必要があります。
  • オブジェクトは親を持つことができません ( で削除するtheObject->setParent(0);か、オブジェクトの代わりに親を移動できます)。

であるため、受信スレッドでイベント ループを実行するか、そのスレッドで関数QTcpSocketを使用する必要があります。waitFor...

このメモは、これが Qt 4.7 以降のソケットでのみ機能することを示唆しているようです。

于 2013-01-24T00:56:41.623 に答える