私はPahoでC++でmqttアプリケーションを書いています。私はhereであるPaho.mqtt Cライブラリを使用しています。新しい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);
}
上記のコードは機能しません。私は1つのメッセージを受信し、loopMessage
関数でwhileループを実行できます。その後、クライアントは切断されます。私はこれがブロッキング・モードにあり、ブローカが(MQTTClientを使用している)キープ・アライブ・インターバル後にクライアントを切断するためだと思います。切断する前にすばやく新しいメッセージを送信すると、クライアントはメッセージを受信しません。
私は非同期クライアント・バージョン(MQTTAsync)を使用しようとしましたが、同じ問題が発生しています。
これを行う方法に関するご提案はありますか?
こんにちは!コールバック関数にwhileループがあると、コールバックが新しいメッセージを受け取ることができないと思いますか、間違っていますか? – Janoshh
@ヤノシュ:それは意味をなさない。もちろん、コールバック関数は新しいメッセージを受信できますが、一度に1つのメッセージしか受信できません。最初のメッセージで完了するまで、2番目のメッセージを受信することはできません。コールバックは、返されたときにのみメッセージで終了します。 – MSalters
@ hardillb:はい、私は意味しています:コールバックにwhileループがある場合、コールバックは決して戻ってこないので、新しいメッセージを受け取ることはできません。私は同じアイデアを持っていたが、スレッディングは大部分が悪い解決策であり、より良いものがあるかもしれないと思っていた – Janoshh