有没有办法让函数暂停它的执行,直到套接字收到特定的消息?使用Signals + QEventLoop等待不起作用,因为虽然它可以等待信号,但是没有任何方法可以获得发出信号的数据(或者在那里?)。
答案 0 :(得分:1)
您可以连接以下信号:
然后,您基本上会读取数据,如果它是您要查找的数据,您可以将布尔变量设置为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";
...
}
这个问题有点简单,但由于除了要求解决方案之外你没有表现出太多的努力,这应该让你开始。