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

时间:2017-03-29 09:10:11

标签: c++ asynchronous synchronization mqtt paho

我正在用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)。如果我在断开连接之前快速发送新消息,则客户端不会收到它。

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

有关如何执行此操作的任何建议吗?

1 个答案:

答案 0 :(得分:0)

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

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

如果您想要在新的消息到达之前一遍又一遍地打印消息内容,那么您需要在单独的线程上执行此操作。