QTimer und Slot

Alles rund um die Programmierung mit Qt
Antworten
redbulls
Beiträge: 59
Registriert: 27. März 2011 15:20

QTimer und Slot

Beitrag von redbulls »

Hi, kurze grundlegende Frage:
Angenommen in einer Klasse gibt es einen timer(QTimer), der im Sekunden-Intervall das timeOut Signal sendet und dadurch einen Slot auslöst.
Was passiert, wenn die Abarbeitung des Slots aber 2 Sekunden benötigt?

danke
sehr interessiert an Qt
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QTimer und Slot

Beitrag von Christian81 »

Dann stauen sich die Signals.
Wenn Du nach der Ausführung des Slots eine Sekunde warten willst dann empfiehlt sich QTimer::singleShot()
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
redbulls
Beiträge: 59
Registriert: 27. März 2011 15:20

Re: QTimer und Slot

Beitrag von redbulls »

ok, ist verständlich.

danke für die schnelle hilfe = )
sehr interessiert an Qt
Markus
Beiträge: 105
Registriert: 31. Januar 2005 16:21

Re: QTimer und Slot

Beitrag von Markus »

Oder den Timer im Slot stoppen und wenn die Verarbeitung erledigt ist, den Timer wieder starten. :wink:
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: QTimer und Slot

Beitrag von RHBaum »

Dann stauen sich die Signals.
Aber nur theorethisch ....
Praktisch:
Mit nem Timer verhinderst oft das threads erstellen musst ... also kann man davon fast immer ausgehen, das der Timer und dein Slot im Selben thread laufen ...
Blockst du aber im Slot den thread, durch intensives Rechnen, IO zugriffe etc ... dann kommt auch dein timer ned dazu, das signal "loszuwerden".
Das heisst, selbst nach 5 sek, wenn der timer den focus bekommt, kriegt der mit "Mensch ich haett scho laengst senden muessen" und tuts ... er holt aber die anderen 4 mal nicht nach ...
der naechste "shot" geht dann in wieder 1 sek raus.
Also bei dir saeh es so aus ... 1 sek, 2 sek (weil timer blockiert war), 1 sek .....

So verhaelt es sich zumindest bei uns unter windows ^^
WIe gesagt, bedingung, Timer und Slot in einem (GUI)thread ...

Ciao ...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QTimer und Slot

Beitrag von Christian81 »

Bist Du Dir da wirklich sicher? Das würde dem QTimer eigentlich widersprechen...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: QTimer und Slot

Beitrag von RHBaum »

Bist Du Dir da wirklich sicher?
Jupp ...
z.b. Windows XP 32, qt 4.6.4 dynamic build verhaelt sich definitiv so ... timer werden nicht "nachgeholt"

wir haben hier Views die haben aller 500ms nen Update (GUI Thread).
wenn ich durch nachladen ... und ja das tu ich ^^ ... den gui thread blockiere, teilweisse im minutenbereich, fallen die timer aus, klar ...
nachm laden kommen die wieder .... aber dann nicht 80-200 kurz hintereinander, sondern wieder gleich schoen im 500ms takt.

Keine ahnung wer das Umsetzt, ob die windows Queue (WM_TIMER) oder die QT event queue, oder ob der timer einfach nur nicht sich den focus holen kann um in die eventloop zu schreiben ...
muesste mir den qt code anschauen ....

btw mach ich nen OnProgress, welches im der App dann nen qApp->processEvents() aufruft ...
Dann kommen die timer zwischendurch aber unreglemaessig und nie doppelt / kurz hintereinander, sondern immer mit mindestens 500ms abstand ...

Ciao ...
Antworten