QTimer e scheduler

QTimer e scheduler

Messaggioda Antonino Battaglia » 11 mar , 2012 4:52 pm

Ciao a tutti,
nella mia applicazione sto utlilizzando un QTimer con intervallo 100ms.
Il segnale timeout e' connesso a uno slot che incrementa un contatore,
in modo da emettere un segnale quando il conteggio arriva a 5,
un altro quando il segnale arriva a 10, un altro ancora quando arriva a 20.
In pratica con un solo QTimer e un contatore vorrei emettere diversi segnali
con diversa periodicità.
Da aggiungere che la mia applicazione gira su sistema embedded cortex a8
con openGL e dopo che l'utente sceglie determinati parametri e preme start
inizia una animazione di crossfading e blurring che dura finche l'utente preme stop.

Finché non parte l'animazione, i timing dei contatori sono corretti.
Quando l'animazione e' eseguita, i timing sono ritardati quasi del doppio,
nonostante l'animazione sia fluidissima, la cpu non supera il 40% e la ram il 50%
e sono cmq sicuro che il blurring e il crossfading sono fatti dall'openGL (shading language in QML).

Ho letto da qualche parte che quando si utlizza openGL in Qt, lo scheduler
esegue ad ogni loop una funzione di openGL update che e' bloccante.
Mi chedo: cosa succede se il Qtimer emette un segnale mentre esegue questa funzione?
e se addirittura ne emettesse due? verrebbero valutati al prossimo loop
o il secondo sovrascrive il primo e incremento il contatore solo una volta?

In generale cosa succede ad ogni loop se mentre vengono eseguiti gli slot,
mi arriva un segnale asincrono come puo essere un segnale da un timer?
L'esecuzione del codice dell slot si blocca per mettere in cosa il segnale
in arrivo e poi riprende da dove si era fermato o perdo completamente
il segnale?

Scusate per le mille domande, ma vorrei capirci di piu' e trovare una soluzione
al mio problema.

Grazie,
ciao
Antonino Battaglia
Trollino in fasce
 
Messaggi: 25
Iscritto il: 01 dic , 2010 10:41 am
Località: Germania
Programmo in: C, C++, VHDL, SystemC, Asm

Re: QTimer e scheduler

Messaggioda Tom » 13 mar , 2012 1:19 pm

Ciao,
la risposta alle tue domande e' qua:

http://doc.qt.nokia.com/4.7/qtimer.html

Accuracy and Timer Resolution

Timers will never time out earlier than the specified timeout value and they are not guaranteed to time out at the exact value specified. In many situations, they may time out late by a period of time that depends on the accuracy of the system timers.

The accuracy of timers depends on the underlying operating system and hardware. Most platforms support a resolution of 1 millisecond, though the accuracy of the timer will not equal this resolution in many real-world situations.

If Qt is unable to deliver the requested number of timer clicks, it will silently discard some.
Tom
Troll quasi convinto
 
Messaggi: 15
Iscritto il: 04 gen , 2012 11:53 pm
Programmo in: c++ python

Re: QTimer e scheduler

Messaggioda Nadir » 20 mar , 2012 1:42 pm

Anche io ho avuto diversi problemi con i QTimer (e non solo), in molte mie aplicazioni sarebbe utile che certi SIGNAL funzionassero effettivamente come degli interrupt ma così non è, i segnali vengono accodati e gestiti successivamente, in alcuni casi ho risolto aggiungendo nei punti giusti delle QApplication::processEvents() che esegue gli slot in coda, questo però spesso non è fattibile per l'eccessivo rallentamento che crea, altre volte ho risolto utilizzando thread separati (ma che creano spesso molte complicazioni)...

Ovviamente le soluzioni dipendono da casi specifici e spesso non ci sono soluzioni migliori ma migliori compromessi...

sarei curioso di conoscere esperienze di altre persone...
Nadir
Troll svezzato
 
Messaggi: 68
Iscritto il: 20 mar , 2012 1:18 pm
Località: Bergamo
Programmo in: C++


Torna a Qt & C++

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti

cron