Как зациклить функцию до прихода нового сообщения mqtt?

Я пишу mqtt приложение на C ++ с Paho. Я использую библиотеку Paho.mqtt C, которую можно найти Вот.

Когда я получаю сообщение в функции обратного вызова, он вызывает другую функцию для печати сообщения. Я хочу иметь возможность зациклить эту функцию, пока не прибудет новое сообщение.

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

Код выше не работает; Я могу получить одно сообщение и запустить цикл while в loopMessage функция. После этого клиент отключается. Я думаю, это потому, что он находится в режиме блокировки, и брокер отключает клиента после интервала поддержания активности (я использую MQTTClient). Если я быстро отправлю новое сообщение перед отключением, клиент не получит его.

Я пытался использовать версию клиента асинхронного (MQTTAsync), но это дает мне ту же проблему.

Любые предложения о том, как это сделать?

1

Решение

Клиент Paho запустит поток для обработки сетевого цикла и сбора новых сообщений, поэтому просто удалите loopMessage функции и распечатать сообщение в messageArrivedCallback,

Вы не должны делать блокирующие вызовы (что делает этот бесконечный цикл) в messageArrivedCallback потому что он должен вернуться, чтобы позволить клиенту продолжать получать сообщения.

Если вы хотите печатать содержимое сообщения снова и снова, пока не прибудет новое сообщение, вам нужно сделать это в отдельном потоке.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]