https://stackoverflow.com/questions/355 ... -qt-signal
https://stackoverflow.com/questions/313 ... n-a-thread
Also habe ich folgendes ausprobiert (alles im gleichen Thread):
Code: Alles auswählen
MyDevice* device = new MyDevice();
QTimer timer;
timer.setSingleShot(true);
QEventLoop loop;
connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit())); // Ohne diesen connect bleibt der Code im loop hängen
connect(device, SIGNAL(released()), &loop, SLOT(quit()));
device->release();
timer.start(500);
loop.exec();
// Hier geht's weiter
someMoreCode();
Wenn von meinem device das Signal released() gesendet wird, dann soll der Slot quit() von loop aufgerufen werden. Dann geht's weiter mit someMoreCode().
Ich habe überprüft, dass das Signal released gesendet wird. Allerdings wird der Slot quit() anscheinend nicht aufgerufen und das Programm bleibt hängen.
Wenn ich stattdessen den Slot quit() über einen Timer aufrufe, dann geht's weiter.
Das würde ich gerne verstehen. Außerdem würde ich gerne wissen, was ich machen muss, damit ich ohne den Timer auskomme (schließlich will ich ja auf das Signal released() warten und nicht auf den Timer). Hat jemand eine Idee?
(Und ja, mir ist klar, dass das kein besonders guter Stil ist. Ich brauche es als Workaround an einer Stelle, da ich für einen Sonderfall nicht meine ganze Anwendung auf eine besser implementierte asynchrone Kommunikation umschreiben kann ...)