deadlock при использовании QTcpSocket::readyRead()
#include "qt_socket_deadlock_test.h"
#include <QtWidgets/QApplication>
#include <QTcpSocket>
#include <QTcpServer>
#include <QDebug>
#include <QMessageBox>
#define REPRODUCE_ISSUE
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setQuitOnLastWindowClosed(false);
qt_socket_deadlock_test test;
test.show();
QTcpServer server;
QObject::connect(&server, &QTcpServer::newConnection, [&]() {
QTcpSocket *socket = server.nextPendingConnection();
QObject::connect(socket, &QTcpSocket::readyRead, [=]() {
QByteArray data = socket->readAll();
qDebug() << data;
#ifdef REPRODUCE_ISSUE
QMessageBox::information(0, QString("Data received"),
QString::fromUtf8(data), QMessageBox::StandardButton::Ok);
#else
getchar();
#endif
});
});
server.listen(QHostAddress::LocalHost, 8888);
return a.exec();
}
Почему обработчик readyRead не вызывается повторно, если данные были получены пока QMessageBox не был закрыт, но вызывается, если использовать getchar?
В обоих случаях блокируется поток UI, но событие получения данных теряется только при использовании QMessageBox.