Kommunikation zwischen QThreads?

Alles rund um die Programmierung mit Qt
Antworten
caetydid
Beiträge: 29
Registriert: 13. Januar 2006 22:25
Kontaktdaten:

Kommunikation zwischen QThreads?

Beitrag 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^)
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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.
caetydid
Beiträge: 29
Registriert: 13. Januar 2006 22:25
Kontaktdaten:

Beitrag 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.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Dann muste halt Events nehmen. Das würde ich bei Threads eh machen.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

"queued connections" sind auch nur Events...
caetydid
Beiträge: 29
Registriert: 13. Januar 2006 22:25
Kontaktdaten:

Beitrag 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.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Deine Event-Loops werden in Threads aber auch regelmäßig aufgerufen? Oder kann es sein, daß die Threads dies sekundenlang nicht tun...?
caetydid
Beiträge: 29
Registriert: 13. Januar 2006 22:25
Kontaktdaten:

Beitrag 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^)
caetydid
Beiträge: 29
Registriert: 13. Januar 2006 22:25
Kontaktdaten:

Beitrag 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?
caetydid
Beiträge: 29
Registriert: 13. Januar 2006 22:25
Kontaktdaten:

pebkac

Beitrag 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^)
Antworten