2016-06-26 29 views
2

In meiner App sende ich eine Nachricht über Paho MQTT und ich muss auf eine Antwort warten, bevor ich eine neue Nachricht sende.Wie man einen Thread hält, bis die MQTT Nachricht angekommen ist

z.B .:

while (!exit){ 
    sendMessage(); //sends message via Paho MQTT 
    myMqttConnection.run() //starts a thread to wait for Response via Paho MQTT 
    //what to do to hold this thread till a message has arrived? 
} 

nachrichts() und myMqttConnection sind 2 verschiedene Themen in dem Fall, dass

Antwort

0

Es gibt ein paar Möglichkeiten, dies zu bekämpfen, die nur begrenzte Informationen gegeben zählt, die Sie zur Verfügung gestellt haben.

Wenn Sie haben, um einen Thread im Code myMqttConnection.run() zu erzeugen, brauchen Sie einen Weg, damit Ihre Threads aufeinander warten.

Wenn Sie mit Old-Skool-Code zufrieden sind, würden ein gemeinsames Guard-Objekt und ein Wartungs-/Benachrichtigungsmechanismus dies tun. Der modernere Weg dazu ist mit etwas wie einem CyclicBarrier.

Andernfalls, wenn Sie einen Thread in myMqttConnection.run() spawnen, aber dann warten Sie, bis es abgeschlossen ist, müssen Sie sich fragen, warum Sie einen Thread laichen ..? Warum nicht einfach run() in read() umbenennen und die Nachricht aus der Nachricht read() zurückgeben.

+0

Da ich die Paho-Bibliothek von Eclipse verwende, spreche ich net speziell einen neuen Thread, eher die Bibliothek. Ich wünschte, ich wäre nicht in der Lage, einen separaten Thread zu verwenden. Danke für Ihre Antwort, ich werde den CyclicBarrier Weg versuchen – fastplayer95