Pregunta

¿Hay alguna manera de hacer una función de pausa, su ejecución hasta que el socket reciba un mensaje específico?El uso de señales + qeventloop para esperar no funciona porque, si bien puede esperar las señales, ¡no hay ninguna manera de obtener los datos que emiten la señal (o está ahí?).

¿Fue útil?

Solución

Podría conectarse a la siguiente señal:

Void QIODEVICE :: ReadyRead () [señal]

Luego, básicamente leí los datos y, si es el que está buscando, podría establecer una variable booleana en verdadera que inicialmente es falsa.Su función continuaría la ejecución solo cuando la variable sea verdadera.

Asegúrese de que la función en pausa no esté durmiendo de manera demasiado sincronizada, etc., sin tener un hilo dedicado.

Entonces, esta sería una forma de resolver su tarea:

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 es una simple simplificación del problema, pero como no ha mostrado mucho esfuerzo que no sea solicitar la solución, esto debería comenzar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top