1

Qt5 用のプログラムをコンパイルしましたが、実行時の動作が異なります。

Qt5 では、イベントループが再入力されるまでソケットは切断されませんwaitForDisconnected()

たとえば、このコード:

socket.disconnectFromServer();
qDebug("Started waitForDisconnected...");
socket.waitForDisconnected();
qDebug("Finished waitForDisconnected.");
qDebug("Started Sleep for 10 seconds...");
Sleep(10*1000);
qDebug("Finished Sleep.");
qDebug("Started QEventLoop...");
QEventLoop().exec();
qDebug("Finished QEventLoop.");

次の出力が得られます。

Started waitForDisconnected...
QLocalSocket::waitForDisconnected() is not allowed in UnconnectedState
Finished waitForDisconnected.
Started Sleep for 10 seconds...
Finished Sleep.
Started QEventLoop...

Started QEventLoop...しかし、メッセージを受け取るまでソケット自体は削除されません。ソケットが反対側から切断されるのを待つ別のアプリケーションからこれを監視しているためです。

Qt4 でコンパイルすると、同じコードが正常に動作waitForDisconnected()し、ソケットが戻る前に切断されます。Qt5waitForDisconnected()では、実際には切断されていないのに、ソケットが切断されたと主張して返されます。

Qt の私のバージョンは 5.1.1 です。

4

0 に答える 0