Mega Code Archive

 
Categories / C# Tutorial / Thread
 

Use Wait() and Pulse() to create a ticking clock

//C# 2.0 The Complete Reference using System;  using System.Threading;  class TickTock {    public void tick(bool running) {      lock(this) {        if(!running) { // stop the clock          Monitor.Pulse(this); // notify any waiting threads          return;        }          Console.Write("Tick ");        Monitor.Pulse(this); // let tock() run        Monitor.Wait(this); // wait for tock() to complete      }    }      public void tock(bool running) {      lock(this) {        if(!running) { // stop the clock          Monitor.Pulse(this); // notify any waiting threads          return;        }          Console.WriteLine("Tock");        Monitor.Pulse(this); // let tick() run          Monitor.Wait(this); // wait for tick() to complete      }    }  }     class MyThread {    public Thread thrd;    TickTock ttOb;      // Construct a new thread.    public MyThread(string name, TickTock tt) {      thrd = new Thread(this.run);      ttOb = tt;      thrd.Name = name;      thrd.Start();     }      // Begin execution of new thread.    void run() {      if(thrd.Name == "Tick") {        for(int i=0; i<5; i++) ttOb.tick(true);        ttOb.tick(false);      }      else {        for(int i=0; i<5; i++) ttOb.tock(true);        ttOb.tock(false);      }    }  }    class TickingClock {    public static void Main() {      TickTock tt = new TickTock();      MyThread mt1 = new MyThread("Tick", tt);      MyThread mt2 = new MyThread("Tock", tt);        mt1.thrd.Join();      mt2.thrd.Join();      Console.WriteLine("Clock Stopped");    }  } Tick Tock Tick Tock Clock Stopped