private Thread _thread1, _thread2;
private Boolean _isWorking;
private ManualResetEvent _exitEvent;
private Stopwatch sw1, sw2;
private UInt32 counter1, counter2;
private void DoWork1()
{
counter1 = 0;
sw1 = new Stopwatch();
sw1.Start();
while(_isWorking)
{
counter1++;
if (sw1.ElapsedMilliseconds > 1000)
{
Console.WriteLine("DoWork1: " + counter1);
counter1 = 0;
sw1.Restart();
}
}
}
private void DoWork2()
{
counter2 = 0;
sw2 = new Stopwatch();
sw2.Start();
do
{
counter2++;
if (sw2.ElapsedMilliseconds > 1000)
{
Console.WriteLine("DoWork2: " + counter2);
counter2 = 0;
sw2.Restart();
}
} while (!_exitEvent.WaitOne(0));
}
public void Start()
{
_thread1 = new Thread(DoWork1);
_isWorking = true;
_thread1.Start();
_thread2 = new Thread(DoWork2);
_exitEvent = new ManualResetEvent(false);
_thread2.Start();
}
public void Stop()
{
_isWorking = false;
_exitEvent.Set();
_thread1.Join();
_thread2.Join();
}
_commandQueue.Enqueue(command);
_commandEvent.Set();