qtimer wird manchmal für längere Zeit nicht ausgelöst

Alles rund um die Programmierung mit Qt
Antworten
juggle
Beiträge: 6
Registriert: 16. Mai 2007 10:23

qtimer wird manchmal für längere Zeit nicht ausgelöst

Beitrag von juggle »

Hi, ich habe folgendes Problem: Ich habe eine Qtimer auf 3 Sekunden gesetzt. Es wird also eigentlich alle 3 Sekunden ein Signal gesendet. Das klappt auch meistens, manchmal setzt der Timer aber für etwa 20 Sekunden aus und schickt keine Signale mehr. Ich benutze mehrere Threads, das sollte aber kein Problem darstellen, oder? Was könnte das Problem sein? Irgendwelche Ideen?

Vielen Dank, Stefan
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Das Signal kann nur verschickt werden wenn Qt auch mal in die Eventloop kommt. Ist bei Dir dann wohl nicht der Fall.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
juggle
Beiträge: 6
Registriert: 16. Mai 2007 10:23

Beitrag von juggle »

hi, woran könnte es denn liegen, dass der Event-Loop eines Threads plötzlich für einige Zeit nicht mehr ausgeführt wird? Ich habe insgesamt 3 Threads, alles QThreads:
in meiner main funktion steht:
comThread.start();
buttonThread.start();
return a.exec();

Es ist der main-Gui-Thread der manchmal für einige Zeit nicht ausgeführt wird.

Vielen Dank, Stefan
Sephral
Beiträge: 201
Registriert: 1. Februar 2006 09:40
Kontaktdaten:

Beitrag von Sephral »

Vermutlich stimmt an Deinen Threads noch etwas nicht.
Vielleicht rechnet einer der Threads in Wirklichkeit im GUI-Thread.

Zu diesem Thema gibt es hier im Forum ne Menge Beiträge.
juggle
Beiträge: 6
Registriert: 16. Mai 2007 10:23

Beitrag von juggle »

Ich verstehe nicht wieso das ein Problem sein könnte. Ich habe einen GUI-Thread dessen Event-loop normalerweise funktioniert aber manchmal für einige Zeit aussetzt. Die anderen Threads haben gar keinen Event-Loop, denn sie benötigen keinen.

Grüße Stefan
Sephral
Beiträge: 201
Registriert: 1. Februar 2006 09:40
Kontaktdaten:

Beitrag von Sephral »

juggle hat geschrieben:Ich verstehe nicht wieso das ein Problem sein könnte. Ich habe einen GUI-Thread dessen Event-loop normalerweise funktioniert aber manchmal für einige Zeit aussetzt. Die anderen Threads haben gar keinen Event-Loop, denn sie benötigen keinen.

Grüße Stefan
Hi,

ein QTimer setzt nicht grundlos aus. Das kann eigentlich nur passieren, wenn irgendetwas am GUI-Thread längere Operationen ausführt, denn der Timer kann, wie weiter oben bereits gesagt, nur auslösen, wenn es der GUI-Thread in den EventLoop schafft.

Irgendetwas muss also den GUI-Thread blockieren für längere Zeit. Und da du erwähntest mit einigen Threads zu arbeiten ist es nahe liegend, dass es damit zu tun hat. Wartest du z.B. aus Versehen im GUI-Thread auf einen Mutex?

Ciao,
Sephral
juggle
Beiträge: 6
Registriert: 16. Mai 2007 10:23

Beitrag von juggle »

nein, es scheint tatsächlich ein QTimer-Problem zu sein. Der Thread blockiert nicht, er reagiert immer noch auf Signale von den anderen Threads. Nur der QTimer wird nicht ausgelöst (bzw. erst eine halbe Minute später). Mit dem Linux Timer scheint es aber zu klappen. Der Fehler tritt nur auf meinem embedded system auf und immer etwa 4 Minuten nachdem das System hochgefahren ist (nicht nachdem ich das Programm starte). Kann man Trolltech wegen so etwas kontaktieren?

Grüße Stefan
Antworten