Seite 1 von 1

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

Verfasst: 2. Juli 2008 16:16
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

Verfasst: 2. Juli 2008 16:45
von Christian81
Das Signal kann nur verschickt werden wenn Qt auch mal in die Eventloop kommt. Ist bei Dir dann wohl nicht der Fall.

Verfasst: 4. Juli 2008 11:09
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

Verfasst: 4. Juli 2008 11:24
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.

Verfasst: 7. Juli 2008 14:11
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

Verfasst: 7. Juli 2008 14:17
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

Verfasst: 12. Juli 2008 14:37
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