我为 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。