Syncrones Timer Event!



  • Hallo Leute,

    folgender Scenario:

    _timer = new Timer(200);
    
    			_timer.Elapsed +=(s, e) =>
    			{				
    				System.Threading.Thread.Sleep(1000);
    				var time = DateTime.Now;
    				Console.WriteLine(
    					time.ToString() + 
    					":" + time.Millisecond.ToString() 
    					+ " TimerEventz");
    			};
    
    			_timer.Start();
    

    im obigen Code wird nun das Timer Event alles 200ms gefeuert, allerding braucht die verarbeitung des Code im event 1000ms. D.h. der Timer nimmt keine Rücksicht darauf das der alte prozess im event noch aktiv ist (was ja so auch ok ist). gibt es ne möglichkeit das zu syncronisieren bzw. chronogisieren???

    1000ms Prozess -> 200ms Warten -> 1000 Prozess -> 200ms Warten -> ...



  • Warum startest du den Timer dann nicht aller 1000ms dann sparst du dir dsa 200ms warten?



  • private void event_tick(...)
    {
        timer.stop();
        // do something that takes 1000ms
        timer.start();
    }
    

    wäre mein erster Gedanke...



  • es gibt in .NET doch auch "one shot" timer.
    die muss man dann nichtmal stoppen, sondern nur nach abarbeitung der timer-funktion neu starten.



  • huhu,

    ja die "start/Stop" variante im event hab ich auch schon angedacht, is aber irgendwie uncool;)

    der One-Shot-Timer hört sich gut an, muss ich mal googeln.

    bisher hab ich nen thread gemacht, welcher in ne schleife intervallmäßig ein event- schmeist .. und so syncron arbeitet (solange am ende niemand den process darin asycnron aufruft^^)



  • NullBockException schrieb:

    ja die "start/Stop" variante im event hab ich auch schon angedacht, is aber irgendwie uncool;)

    Wohnt der noch zu Hause? Wie uncool...

    Das ist schon ein vernünftiger Weg und wird über Jahre so praktiziert...

    Mach das Junge...



  • ich finde die stop/start variante auch "uncool", allerdings eigentlich genau so "uncool" wie die one-shot/start variante.

    eine "garnix" variante mit einem spezialisierten timer wäre IMO die beste lösung.



  • Was meinst du mit einer "garnix" variante? ich hab mir nen timer selber geschrieben mit nem thread.. und sleep /events.. etc.



  • jo, sowas meine ich 🙂

    einen timer wo man eben "garnix" tun muss, damit er nicht tickt, während der callback noch ausgeführt wird.


Anmelden zum Antworten