Pausando a execução até que uma mensagem específica em um soquete seja recebida?
-
02-01-2020 - |
Pergunta
Existe alguma maneira de fazer uma função pausar sua execução até que o soquete receba uma mensagem específica?Usar Signals + QEventLoop para esperar não funciona porque, embora possa esperar por sinais, não há como obter os dados que o sinal emitiu (ou existe?).
Solução
Você pode se conectar ao seguinte sinal:
Então, você basicamente leria os dados e se for o que você está procurando, você poderia definir uma variável booleana como verdadeira que é inicialmente falsa.Sua função continuaria a execução somente quando a variável fosse verdadeira.
Certifique-se de que a função pausada não esteja dormindo demais de maneira sincronizada, etc., sem ter um thread dedicado.
Então, esta seria uma forma de resolver sua tarefa:
MySocketManager::MySocketManager(QObject *parent): QObject(parent)
{
...
connect(m_mySocket, SIGNAL(readyRead()), SLOT(handleReadyRead()));
...
}
void MySocketManager::handleReadyRead()
{
if (m_mySocket.readAll() == "myMessage")
continue = true;
}
...
void myFunction()
{
...
continue = false;
qDebug() << "Pause";
while (!continue) { ... }
qDebug() << "Continue";
...
}
Esta é uma pequena simplificação do problema, mas como você não demonstrou muito esforço além de pedir uma solução, isso deve ajudá-lo a começar.