QCoreApplication::postEvent in Multithreading Umgebungen

Alles rund um die Programmierung mit Qt
Antworten
ptr
Beiträge: 10
Registriert: 14. März 2008 20:40
Wohnort: Tirol

QCoreApplication::postEvent in Multithreading Umgebungen

Beitrag 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!
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag 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?
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
ptr
Beiträge: 10
Registriert: 14. März 2008 20:40
Wohnort: Tirol

Beitrag 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?
Antworten