2008-09-09 6 views
1

Weiß jemand, wie der Event-Handler die geposteten Ereignisse verwaltet?Event-Handler in Qt mit Multithread

In meiner app ich habe zwei Threads (guiThread und computationThread). Nachdem eine Ausnahme ausgelöst wurde, rufe ich postEvent(..) zu einem vorhandenen Dialogfeld auf. Der Qt-Event-Handler hält diesen zurück, bis der Dialog geschlossen wird.


Sorry meine Frage ist ein bisschen bewölkt. Ich werde es genauer schreiben, wenn ich noch Zeit habe. Ich habe eine Arbeit gefunden. Aber für mich ist das Problem immer noch interessant.

Antwort

2

Wie etwa in der QCoreApplication::postEvent Qt Dokumentation erwähnt:

Wenn die Steuerung kehrt zu der Hauptereignisschleife, werden alle Ereignisse, die in der Warteschlange gespeichert sind, werden die Notify() Funktion gesendet werden.

... was erklärt, warum der Qt Event Handler das Ereignis hält, bis der Dialog geschlossen wird. Wenn ich richtig verstehe, was Sie tun möchten, würde ich versuchen, sendEvent zu verwenden.

1

Ich vermute, dass der Dialog, den Sie erstellt haben, modal ist, was bedeuten würde, dass er eine eigene Ereignisschleife ausführt. Keine Ereignisse, die auf dem allgemeinen guiThread gepostet werden, werden verarbeitet, bis alle modalen Ereignisschleifen beendet sind.

Alternativ können Sie das Ereignis direkt in den Dialog stellen, wenn der Dialog sowohl modal als auch über das Ereignis bekannt sein soll. Sie müssen herausfinden, wie Sie mit Zeigern auf eine geteilte Weise umgehen, aber wenn nichts Kompliziertes passiert, können Sie möglicherweise die QApplication :: activeWindow() - Funktion verwenden.

0

Wie andere bereits geschrieben haben, glaube ich, dass dieses Verhalten durch die Tatsache verursacht wird, dass der Dialog seine eigene Ereignisschleife startet.

Wenn Sie Qt4 verwenden, können Sie versuchen, queued signal/slot connections als Alternative zum Buchen von Ereignissen zu verwenden.