我正在用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),但它给了我同样的问题。
有关如何执行此操作的任何建议吗?
答案 0 :(得分:0)
Paho客户端将启动一个线程来处理网络循环并收集新消息,因此只需删除loopMessage
函数并在messageArrivedCallback
中打印消息。
你不应该在messageArrivedCallback
中进行阻塞调用(这是无限循环所做的),因为它必须返回以允许客户端继续接收消息。
如果您想要在新的消息到达之前一遍又一遍地打印消息内容,那么您需要在单独的线程上执行此操作。