Seite 1 von 1

Kommunikation zwischen QThreads?

Verfasst: 12. November 2006 10:51
von caetydid
Hi Qt-Community,

ich entwickle eine Applikation mit mehreren QThreads die parallel laufen.
Zur Kommunikation habe ich SIGNAL/SLOTS benutzt, was im Grunde auch ganz gut funktioniert.
Mir ist allerdings aufgefallen, daß auf einigen Rechnern die CONNECTs eine Wahnsinnsverzögerung aufweisen (eine Sekunde oder so vom emit bis zum slot).
Ich bräuchte Verzögerungen von ca. 20 ms oder weniger.

Inzwischen bin ich auf das gestoßen:
http://lists.trolltech.com/qt-interest/ ... 782-0.html
Hier wird gesagt, man sollte vielleicht stattdessen QEvents benutzen.
Das Posting ist aber recht alt, weiß jemand, wie man am besten mit Qt4 zwischen Threads kommuniziert?

vielen Dank für eure Hinweise,
Stefan K. >8^)

Verfasst: 12. November 2006 11:18
von BartSimpson
Events sind schneller, falls du ein Beispiel dafür haben willst, sagt Bescheid.(PN mit deiner E-Mail)
Du must aber die GPL akzeptieren.

Verfasst: 12. November 2006 11:26
von caetydid
BartSimpson hat geschrieben:Events sind schneller, falls du ein Beispiel dafür haben willst, sagt Bescheid.(PN mit deiner E-Mail)
Du must aber die GPL akzeptieren.
Aha, dachte ich mir!
Trotzdem kanns ja nicht sein, daß man fast 1 Sek Verzögerung hat, das aber nur auf manchen Computern.
Ich schätze es liegt daran, daß zwischen versch. Threads nur queued connections benutzt werden können.

Verfasst: 12. November 2006 11:36
von BartSimpson
Dann muste halt Events nehmen. Das würde ich bei Threads eh machen.

Verfasst: 12. November 2006 12:18
von upsala
"queued connections" sind auch nur Events...

Verfasst: 12. November 2006 15:24
von caetydid
upsala hat geschrieben:"queued connections" sind auch nur Events...
Und genau deswegen muß das auch mit Signals/Slots gehen.
Die Verzögerung tritt unabhängig davon auf, ob ich das Signal 10x oder 100x pro Sekunde emittiere.

Verfasst: 12. November 2006 20:32
von upsala
Deine Event-Loops werden in Threads aber auch regelmäßig aufgerufen? Oder kann es sein, daß die Threads dies sekundenlang nicht tun...?

Verfasst: 12. November 2006 20:38
von caetydid
Bin mir jetzt ziemlich sicher, daß es sich nicht um einen Bug in meinem Code handelt.

Habe eine Klasse geschrieben mit einem QTimer, der alle 50ms ein Signal auslöst.
In der überliegenden Klasse habe ich ein connect auf einen SLOT gemacht, der dann ein this->update() aufruft.
Bei geringer CPU-Last habe ich die Verzögerung, leider kaum reproduzierbar (nur auf meinem System, und auch nicht 100% reproduzierbar. Irgendwann gehts plötzlich, nach einem Reboot wieder nicht).

Hat mal jemand "sendPostedEvents" genutzt, damit müßte ich die Event Queue doch leerpusten können, oder?

Caetydid sure does love Windows >8^)

Verfasst: 12. November 2006 20:42
von caetydid
upsala hat geschrieben:Deine Event-Loops werden in Threads aber auch regelmäßig aufgerufen? Oder kann es sein, daß die Threads dies sekundenlang nicht tun...?
meine threads enthalten alle msleeps daß es kracht - kanns sein daß sowas nicht ausreicht?

pebkac

Verfasst: 12. November 2006 21:32
von caetydid
Hi,

wie fast immer ist nicht Qt schuld sondern der Rest:
Ich habe einen Thread in einer anderen Bibliothek, der Daten von der COM-Schnittstelle liest.
Der kriegt scheinbar Probleme, sobald ich andere QThreads laufen lasse :(

danke für die Geduld
>8^)