暂停执行直到收到套接字上的特定消息?
Posted
技术标签:
【中文标题】暂停执行直到收到套接字上的特定消息?【英文标题】:Pausing execution until a specific message on a socket is received? 【发布时间】:2014-04-14 16:53:58 【问题描述】:有什么方法可以让函数暂停执行,直到套接字接收到特定消息?使用 Signals + QEventLoop 来等待是行不通的,因为虽然它可以等待信号,但没有任何方法可以获取信号发出的数据(或者是否存在?)。
【问题讨论】:
【参考方案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";
...
这是对问题的简单化,但由于除了寻求解决方案之外您没有付出太多努力,这应该可以帮助您开始。
【讨论】:
谢谢。使用 QEventLoop 而不是 while 循环修改您的解决方案就可以了 @rogueyoshi:很好,是的,事件循环很好。以上是关于暂停执行直到收到套接字上的特定消息?的主要内容,如果未能解决你的问题,请参考以下文章
阻止 jupyter notebook 单元执行,直到收到特定消息