Seite 1 von 1

QCoreApplication::postEvent in Multithreading Umgebungen

Verfasst: 24. Dezember 2008 11:39
von ptr
Hallo,
Vielleicht könnt ihr mir bei folgenden Problem weiterhelfen:
Ich hab ein Objekt, welches zu einem Dispatcher Thread zugeordnet ist (QObject::moveToThread(Dispatcher)), und möchte diesem jetzt ein Event schicken, welches aber asynchron abgearbeitet werden soll. Laut Qt Doku macht man das mit QtCoreApplication::postEvent.
Beim Testen sende ich dann ein Event aus dem GUI Thread, das Event wird aber nicht wie erwartet im Dispatcher Thread ausgeführt, sondern im GUI Thread. Die Qt Doku ist dahingehenden auch nicht besonders gut, für mich ist das ein Standard Anwendungsfall, und ich hab in der Doku nichts konkretes über einen solchen Problemfall gelesen. Sie schreiben nur "Adds the event event, ..., to an event queue ...", wenn ich das schon lese, "to an event queue", mich würd halt interessieren zu welcher?
Dankeschön!

Verfasst: 26. Dezember 2008 00:46
von Volker
Hab's selber noch nicht ausprobiert, aber normal würde ich annehmen zu der Event Queue die für das Objekt zuständig ist. Wenn also das Objekt wirklich in einem eigenen Thread mit existierender Qt Queue ( exec() aufgerufen? ) steckt, dann sollte der Event auch dort abgearbeitet werden.

Ist dein Dispatcher von QThread abgeleitet und hast du dort exec() aufgerufen?

Verfasst: 29. Dezember 2008 13:15
von ptr
hab in der doku unter thread support folgendes gefunden:
You can manually post events to any object in any thread at any time using the thread-safe function QCoreApplication::postEvent(). The events will automatically be dispatched by the event loop of the thread where the object was created.
also erzeugt wurde mein objekt im gui thread, und danach dem dispatcher zugeordnet, würde also erklären, wieso events an den gui thread gesendet werden. nur frag ich mich, ob das auch so sein soll?