暂停执行直到收到套接字上的特定消息?

时间:2014-04-14 16:53:59

标签: c++ qt qt4 qtcpsocket qt-signals

有没有办法让函数暂停它的执行,直到套接字收到特定的消息?使用Signals + QEventLoop等待不起作用,因为虽然它可以等待信号,但是没有任何方法可以获得发出信号的数据(或者在那里?)。

1 个答案:

答案 0 :(得分:1)

您可以连接以下信号:

  

void QIODevice::readyRead() [signal]

然后,您基本上会读取数据,如果它是您要查找的数据,您可以将布尔变量设置为true,最初为false。只有当变量为真时,您的函数才会继续执行。

确保暂停的功能没有以同步方式休眠等,而没有专用线程。

所以,这将是解决任务的一种方式:

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";
    ...
}

这个问题有点简单,但由于除了要求解决方案之外你没有表现出太多的努力,这应该让你开始。