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

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:很好,是的,事件循环很好。

以上是关于暂停执行直到收到套接字上的特定消息?的主要内容,如果未能解决你的问题,请参考以下文章

Python 3.4 套接字未收到完整消息

节点 Js 无法将消息发送到在线特定套接字

节点 Js 无法将消息发送到在线特定套接字

阻止 jupyter notebook 单元执行,直到收到特定消息

在 node.js 中管理基于命令的 TCP 套接字 API 上的连接

自服务以来,我使用一个套接字时收到多个消息