Chiarimenti sul TIMER

sabato 21 novembre 2009 - 19.28

boc_babi Profilo | Junior Member

Ciao a tutti,

ho dei seri dubbi per quanto riguarda il comportamento e la risoluzione dei TIMER.

Dal capitolo "Limitazioni della proprietà Interval del componente Timer di Windows Form" presente nell'MSDN leggo che:

1) "Se una delle applicazioni in esecuzione utilizza una notevole quantità di risorse del sistema, ad esempio mediante cicli lunghi, calcoli complessi o accessi alle unità, alla rete o alle porte, l'applicazione potrebbe non ricevere gli eventi timer con la frequenza specificata dalla proprietà Interval."

2) "Il sistema genera 18 cicli di clock al secondo. Anche se la proprietà Interval viene misurata in millisecondi, la precisione effettiva di un intervallo non potrà quindi essere superiore a un diciottesimo di secondo."


La mia applicazione deve poter eseguire un test di tenuta su di una valvola.
Il tempo di questo test deve essere piuttosto preciso, nell'ordine dei mSec.
Da quanto ho capito il TIMER non è il componente che fa al caso mio in quanto durante il test devo poter essere libero di eseguire altre operazioni con il rischio di "non ricevere gli eventi timer con la frequenza specificata dalla proprietà Interval"; inoltre la precisione del TIMER di 55mS (1\18 sec) non fa per me.

Ditemi se ho sbagliato qualcosa nel ragionamento e se eventualmente ci sono alternative per effettuare il test di cui sopra.


Grazie mille, Boc

Brainkiller Profilo | Guru

>Ditemi se ho sbagliato qualcosa nel ragionamento e se eventualmente
>ci sono alternative per effettuare il test di cui sopra.

Hai perfetttamente ragione. Bel problema quello dei Timer non sono molto affidabili.
Allora oltre a quel tipo di Timer ti consiglio i diversi tipi di Timer che puoi implementare in .NET. che hanno risoluzioni diverse e inferiori rispetto a 1/18.

1) System.Windows.Forms.Timer class (che penso sia quello che stai usando ora)
2) System.Threading.Timer class
3) System.Timers.Timer class
4) Multimedia timer (http://www.codeproject.com/KB/miscctrl/lescsmultimediatimer.aspx)
5) System.Windows.Threading.DispatcherTimer
6) System.Diagnostics.StopWatch

Presta maggiore attenzione all'ultima numero 6 e guarda la documentazione e ti faccio notare il seguente frammento:

The Stopwatch measures elapsed time by counting timer ticks in the underlying timer mechanism. If the installed hardware and operating system support a high-resolution performance counter, then the Stopwatch class uses that counter to measure elapsed time. Otherwise, the Stopwatch class uses the system timer to measure elapsed time. Use the Frequency and IsHighResolution fields to determine the precision and resolution of the Stopwatch timing implementation.

Maggiori informazioni sui Timer qui:
http://msdn.microsoft.com/en-us/magazine/cc164015.aspx

Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

boc_babi Profilo | Junior Member

Grazie mille David.

Darò un'occhiata alla documentazione che mi hai suggerito.

Buona giornata, BOC
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5