[C#] Gestione Timer

venerdì 11 maggio 2007 - 10.53

breton79 Profilo | Newbie

Buongiorno a tutti.
Volevo approfondire l'argomento dei Timer nel FW 2.0.
Ho scritto la versione del FW perchè non sò se è cambiato qualcosa rispetto alla versione precedente.
Utilizzo 3 Timer in una applicazione, tutti hanno lo stesso intervallo di attivazione, e vorrei sapere come il C# gestisce l'insieme dei timer.
E' interessante conoscere l'esatta esecuzione di codice che viene avviato dai timer, e se i timer si possono sovrapporre e creare problemi di incongruenze.
Io ho provato a darmi una risposta, ma non credo sia molto corretta...

Uso la classe Timer inclusa in System.Windows.Forms e da quello che ho capito il timer non funziona come thread, ma come evento. Se fosse così, penso che tutti gli eventi che sono stati generati ma non eseguiti dal sistema, vengono messi in coda ed eseguiti in sequenza (immagino un funzionamento di tipo FIFO) uno dopo il termine dell'altro.
Se ad esempio ho una sintassi del tipo:
....
// Tutti i timer sono impostati allo stesso intervallo
timer1.Enabled = false
timer2.Enabled = false
timer3.Enabled = false
...
timer1.Enabled = true
timer2.Enabled = true
timer3.Enabled = true
...

accade che il sistema esegue "timer1" e mette in coda "timer2" e "timer3", al termine di "timer1" viene eseguito il codice di "timer2" e così via....

Detto questo volevo sapere se in tutto questo discorso c'è qualcosa di vero .
Grazie

Brainkiller Profilo | Guru

>Detto questo volevo sapere se in tutto questo discorso c'è qualcosa
>di vero

Non mi risulta, una volta impostato un intervallo e mandato in esecuzione i Timer eseguono il codice contemporaneamente indipendentemente uno dall'altro e non prima uno poi l'altro. Naturalmente dipende che intervalli si mettono. Se uno lo metti con intervallo ogni 500 millisecondi e l'altro ogni 1000, ogni due tick del primo eseguiranno il codice contemporaneamente. Poi sul contemporaneamente ci sarebbe da discutere.... come sai con una sola CPU le istruzioni vengono comunque eseguite una dietro l'altra sequenzialmente. Solo con CPU multicore o macchine SMP il codice può essere eseguito effettivamente in modo simultaneo grazie alle pipeline aggiuntive.
ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

munissor Profilo | Senior Member

Il sistema operativo gestisce i tuoi timer, poi allo scadere del tempo viene inviato un messaggio WM_TIMER sulla coda dei messaggi del thread che ha creato il timer.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5