Ciclo infinito utilizzando i Ticks

lunedì 12 aprile 2010 - 17.31

boc_babi Profilo | Junior Member

Ciao a tutti,

ho realizzato una Sub personalizzata che gestisce un evento.
La Sub, una volta fatti opportuni confronti tramite l'istruzione Now.Ticks, genera un evento.
Praticamente quando entro nella Sub controllo a quanti Tiks sono e fintanto che non è trascorso un certo tempo (è l'argomento che passo alla Sub) non esco dalla Sub. E' un tentativo di creare un temporizzatore abbastanza fine.

Il problema nasce quando, una volta intercettato l'evento e aver fatto quello che dovevo fare, ad esempio aggiornare una scitta, rilancio la Sub.

Mi esce l'errore <<Eccezione non gestita di tipo 'System.StackOverflowException' in System.Windows.Forms.dll>>

Se il tempo che passo come argomento alla Sub è di 1 secondo, non ci sono problemi, l'errore appare quando vado intorno agli 0,5 secondi.

Sapete darmi delle spiegazioni in merito ?

Grazie mille.

Cimperiali Profilo | Newbie

non ti piaceva Timer?

boc_babi Profilo | Junior Member

peccato che il timer abbia una risoluzione vergognosa

Cimperiali Profilo | Newbie

tu credi? anche i ticks che ti leggi da gettickcounter non sono affidabili: la risoluzione è intorno ai 20 msec comunque. Tant'è che sotto gli 05 cominci ad avere problemi (ma nel tuo caso mi sa che si tratta di "rientranza").

boc_babi Profilo | Junior Member

Ok, ho notato che anche i ticks non sono precisissimi, li ritengo comunque meglio del timer del windows form che si aggira sui 55ms di risoluzione e comunque molto lontani dalla risoluzione di 5 ms che vorrei ottenere (ma possibile che non sia possibile avere un timer che mi spacchi il ms su un PC che ha un processore da migliaia e migliaia di Hz ?)

Cosa intendi per "rientranza" ?

Cimperiali Profilo | Newbie

"problema di rientranza" significa che non hai gestito bene "la rientranza" cioè il fatto che, mentre viene eseguita una porzione di codice, prima che tale esecuzione sia finita, viene chiamato quello stesso codice. Di norma questo problema è tipico del multithread e dell'uso di timer non thread safe. Il timer che non ti piace è thread safe (ma perchè è a thread singolo). System.Timer lavora in un thread separato, ma se lo sai usare è thread safe.
Sistem.threading.timer è esplicitamente NON thread safe, che significa che devi gestire tu la faccenda, se lo vuoi usare.
per saperne di più sui vari tipi di timer e su come usarli senza far scoppiare tutto:
[url]http://msdn.microsoft.com/en-us/magazine/cc164015.aspx[/url]
Per saperne di più sulla rientranza:
[url]http://it.wikipedia.org/wiki/Codice_rientrante[/url]
[url]http://rejex.wordpress.com/2009/12/15/funzioni-rientranti/[/url] e qui, se ti leggi i commenti, capisci che sei in un terreno minato...


boc_babi Profilo | Junior Member

Grazie mille per le info, ciao
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