QEventLoop loop;
                  
                  
                      QObject::connect(m_socket, &QAbstractSocket::connected, this, [&]() {
                  
                  
                          setState(Interface::State::Run);
                  
                  
                          loop.quit();
                  
                  
                          result = true;
                  
                  
                      });
                  
                  
                      QObject::connect(m_socket, &QAbstractSocket::errorOccurred, this, [&]() {
                  
                  
                          loop.quit();
                  
                  
                          result = false;
                  
                  
                      });
                  
                  
                      m_socket->connectToHost(m_settings.ip, m_settings.port, QIODevice::ReadWrite, QAbstractSocket::IPv4Protocol);
                  
                  
                      loop.exec();
                  
                  
                      return result;
                  
                  
                  }
                  
                  
                  
                  
                  
                  Уважаемые знатоки, добрый день! Можно ли дождаться от сокета состояния подключения более лаконично, без захвата в лямбду локальных переменных? 🧐 В члены класса их выносить особо не хочется.  m_socket - инстанс QTcpSocket
                  
                  
                
Сделать все асинхронно. Будет лаконично
тебе синхронно надо?
По-хорошему да, надо сразу понимать, удалось подключиться, или нет
socket->connectToHost(...); quint64 now=QDateTime::currentMsecsFromEpoch(); while (socket->state() == QAbstractSocket::ConnectingState && QDateTime::currentMsecsFromEpoch() - now < TIMEOUT) { QThread::msleep(10); qApp->processEvents(); } if (socket->state()==QAbstractSocket::ConnectedState) ... else ... примерно так, там уж сам пофантазируй дальше
Есть готовый метод https://doc.qt.io/qt-6/qabstractsocket.html#waitForConnected
socket->connectToHost(...); if(!socket->waitForConnected(20000)) // 20 секунд { qCritical() << "error connect:" << socket->error() << socket->errorString() << socket->state(); return false; } // connect ok ... return true
О, не увидел. Спасибо большое!
Обсуждают сегодня