如何循环函数直到新的 mqtt 消息到达?

How to loop a function till a new mqtt message arrives?

我正在使用 Paho 用 C++ 编写一个 mqtt 应用程序。我正在使用 Paho.mqtt 可以找到的 C 库 here.

当我在回调函数中收到消息时,它会调用另一个函数来打印消息。我希望能够循环该函数,直到收到新消息。

bool start = false;
void loopMessage(std::string message){
   start = true;
   while(start){
       std::out << "message: " << message;
   }
}
int messageArrivedCallback(mqtt message){
   start = false;
   loopMessage(message);
}

上面的代码不起作用;我可以收到一条消息和 运行 loopMessage 函数中的 while 循环。之后客户端断开连接。我认为这是因为它处于阻塞模式并且代理在保持活动间隔后断开客户端(我正在使用 MQTTClient)。如果我在断开连接之前快速发送一条新消息,客户端不会收到它。

我尝试使用异步客户端版本 (MQTTAsync),但它给了我同样的问题。

关于如何做到这一点有什么建议吗?

Paho 客户端将启动一个线程来处理网络循环并收集新消息,因此只需删除 loopMessage 函数并在 messageArrivedCallback.

中打印消息

您不应在 messageArrivedCallback 中进行阻塞调用(这是此无限循环所做的),因为它必须 return 以允许客户端继续接收消息。

如果你想一遍又一遍地打印消息内容直到新消息到达,那么你需要在一个单独的线程上进行。