管理

多线程同步控制Event方法

Posted on 2011-04-07 10:28  lzhdim  阅读(233)  评论(0)    收藏  举报
/// <summary>
/// 使用Event做同步控制
/// 三个Event组合使用就可以产生同Suspend,Resuem,Abort相同的效果
/// 而且你可以控制Abort的时机以及并作出适当的处理
/// 而不是像Thread.Abort一样通过异常的方式结束线程
/// </summary>
static void UseSyncEvent()
{
Console.WriteLine(
"----------Use sync event----------");
AutoResetEvent evtPause
= new AutoResetEvent(false);
AutoResetEvent evtResume
= new AutoResetEvent(false);
AutoResetEvent evtStop
= new AutoResetEvent(false);
Thread t
= new Thread(
new ThreadStart(() =>
{
//WaitOne(1000),可产生Sleep(1000)相同的效果
//如果eveStop被置位,则立即返回True,跳出循环
//如果等待1000ms超时,则返回False,继续循环
while (!evtStop.WaitOne(1000))
{
//WaitOne(0)可立即判断evtPase有没有被置位
//如果置位,进入暂停状态,等待Resume被置位才会恢复线程执行
if (evtPause.WaitOne(0))
{
//WaitOne()不带参数表示一直等待,直到被置位
evtResume.WaitOne();
}
Console.WriteLine(
"Now Date:{0}", DateTime.Now);
}
}
));
t.Start();
//暂停线程执行
Console.ReadKey();
evtPause.Set();
Console.WriteLine(
"Thread suspended");
//继续线程执行
Console.ReadKey();
evtResume.Set();
Console.WriteLine(
"Thread resumed");
//结束线程
Console.ReadKey();
evtStop.Set();
Console.WriteLine(
"Thread stopped");
Console.ReadKey();
}
Copyright © 2000-2022 Lzhdim Technology Software All Rights Reserved