我正在用Paho在C++中編寫一個mqtt應用程序。我正在使用Paho.mqtt C庫,可以找到here。如何循環一個函數,直到新的mqtt消息到達?
當我在回調函數中收到消息時,它會調用另一個函數來打印消息。我希望能夠循環該功能,直到有新消息到達。
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),但它給我同樣的問題。
有關如何做到這一點的任何建議?
嗨!如果在回調函數中有一個while循環,我認爲回調不能接收新消息,或者我錯了嗎? – Janoshh
@Janoshh:這沒有道理。當然,回調函數可以接收新消息,但一次只能接收一條消息。在完成第一條消息之前,它不能收到第二條消息。回調只在返回消息時完成。 – MSalters
@hardillb:是的,我的意思是:如果回調中存在一個while循環,則回調永遠不會返回,因此它不會收到新消息。好吧,我有同樣的想法,但線程是一個不好的解決方案,我認爲可能會有更好的解決方案 – Janoshh