Hi,
Ich habe gerade das Problem, dass ich aus einem thread heraus
ein Event an ein Widget posten will, dieses aber nicht beim Widget ankommt.
Meine Thread Klasse ist von QThread abgeleitet und aus der run methode rufe ich
QCoreApplication::postEvent(targetWidgetPtr, MyCustomEvent);
auf...
targetWidgetPtr ist gueltig und verweis auf das zu empfangende Widget., MyCustomEvent ist von QCustomEvent abgeleitet.
das targetWidget reimlementiert
void customEvent (QEvent*)....
habe es auch schon mit bool event(QEvent *) probiert...
aber das event kommt hier nie an..
Muss fuer den Thread die eventloop explicit gestartet werden, auch dann, wenn ich wie in meinem fall postEvent fuer die QCoreApplication thread aufrufe ?
Wenn ich exec fuer den Thread aufrufe geht es gar nicht....
einer eine Ahnung was das sein kann?
Stay tuned,
Nando
Multithreading Posten von Events von Thread zu Thread.
-
ArneStocker
- Beiträge: 300
- Registriert: 3. November 2004 16:15
- Wohnort: Berlin
hi nando
grundsätzlich ist PostEvent threadsicher (steht so auch in der Doku) allerdings muss beim Compilieren das Flag QT_THREAD_SUPPORT gesetzt sein.
Du muss das event mit new auf dem Heap erzeugen und dann einen Zeiger auf das event an die Eventschleife übergeben, das sollte eigentlich funktionien.
gruss Arne
grundsätzlich ist PostEvent threadsicher (steht so auch in der Doku) allerdings muss beim Compilieren das Flag QT_THREAD_SUPPORT gesetzt sein.
Du muss das event mit new auf dem Heap erzeugen und dann einen Zeiger auf das event an die Eventschleife übergeben, das sollte eigentlich funktionien.
Code: Alles auswählen
QMyCustumEvent *pMyEvent = new QMyCustomEvent();
pMyEvent->.. blabla
qApp->postEvent(pTargetWidget,pMyEvent); // kein Delete für pMyEvent aufrufen
Hi Arne,
danke fuer den Hinweis....
Allerdings nutze ich QT4 beta1 und da ist der thread support standardmaessig dabei.
Es funktioniert mittlerweile.... auch ohne den event loop des threads explizit zu starten. dieser wird scheinbar nur benoetigt um selber events zu emfangen und zu posten.... da ich aber die qApp->postEvent
bzw. QT4: QCoreApplication::postEvent() aufrufe geht das senden des events ueber die main loop... die ja dann scheinbar thread save sein muss / sollte...
Gruss,
Nando
danke fuer den Hinweis....
Allerdings nutze ich QT4 beta1 und da ist der thread support standardmaessig dabei.
Es funktioniert mittlerweile.... auch ohne den event loop des threads explizit zu starten. dieser wird scheinbar nur benoetigt um selber events zu emfangen und zu posten.... da ich aber die qApp->postEvent
bzw. QT4: QCoreApplication::postEvent() aufrufe geht das senden des events ueber die main loop... die ja dann scheinbar thread save sein muss / sollte...
Gruss,
Nando