167 messaggi dal 22 giugno 2008
Date uno sguardo a questo codice:


 class Program
    {
       //dichiaro un contatore
       public static int TimeElapsed=0;

        static void Main(string[] args)
        {
            //istanzio un timer, lo imposto a 1 millisecondo e lo 
            //faccio partire immediatamente
            TimerCallback tc = new TimerCallback(Elapsed);
            Timer t = new Timer(tc, null, 0, 1);
            Thread.Sleep(1000);
            //scrivo il risultato del contatore
            Console.WriteLine(TimeElapsed.ToString());
            Console.ReadLine();
        }

        //funzione choamata ad ogni tick del timer
        public static void Elapsed(object sender)
        {
            TimeElapsed++;
        }

    }



Nulla di complesso vero?? Eppure il valore del contatore al momento della WriteLine è di circa 65 quando mi aspetterei 1000 e rotti...
Visto che il timer e la sleep lavorano in millisecondi, sapete dirmi perchè dopo la sleep il contatore và avanti di così poco?

Ho provato anche questo ma il risultato non cambia!!

    class Program
    {
       public static int TimeElapsed=0;
       public static bool Done = false;
        static void Main(string[] args)
        {
            TimerCallback tc = new TimerCallback(Elapsed);
            Timer t = new Timer(tc, null, 0, 1);
            System.Timers.Timer St = new System.Timers.Timer();
            St.Interval = 1000;
            St.Elapsed+=new System.Timers.ElapsedEventHandler(St_Elapsed);
            St.Start();
            while (!Done)
            {
                Thread.Sleep(10);
            }
            Console.WriteLine(TimeElapsed.ToString());
            Console.ReadLine();
        }

        public static void St_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            Done = true;
        }

        public static void Elapsed(object sender)
        {
            TimeElapsed++;
        }

    }
540 messaggi dal 24 maggio 2002
Contributi
credo possa derivare dal fatto che la chiamata viene fatta ogni millisecondo più il tempo di elaborazione computazionale della stessa.

Prova a usare tempi più linghi come centinaia di ms o secondi, in questo caso il tempo computazionale del "++" dovrebbe essere irrisorio.

Marco.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
Community
Ultimi messaggi
UTENTI ONLINE
    In primo piano

    I più letti di oggi

    Media
    In evidenza
    MISC