У меня есть клиент-серверное приложение, которое работает как чудо, когда сервер запускается раньше клиента, но, поскольку я не знаю, запускается ли сервер первым, мне нужно, чтобы клиент продолжал пытаться подключиться к серверу без блокировки интерфейса.
Лучшее, что мне пришло в голову, это сделать такой цикл
void client::initConnection(){
connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(readMessage()));
connect(tcpSocket, SIGNAL(connected()), this, SLOT(clientConnected()));
connect(tcpSocket, SIGNAL(disconnected()), this, SLOT(disconnectedFromHost()));
while (tcpSocket->state() != QAbstractSocket::ConnectedState) {
tcpSocket->abort();
tcpSocket->connectToHost(address, port, QIODevice::ReadWrite);
tcpSocket->waitForConnected(1000);
}
}
но если я вызываю этот код в основном потоке, он блокирует графический интерфейс (по понятным причинам), я подумал, что мне, возможно, придется использовать потоки, но кажется, что на самом деле невозможно работать с сокетом из потока, отличного от того, который был создан в.
Так, может быть, есть способ запустить этот метод, не блокируя графический интерфейс и не меняя архитектуру моего приложения?