代码
#region 信号使用于任务分解
static EventWaitHandle ready=new AutoResetEvent(false);
static EventWaitHandle go=new AutoResetEvent(false);
static volatile string task="";
static void WaitEventHandlerThreadTest()
{
//一个任务分解为多个线程来完成
new Thread(DoWorker).Start();
for (int i=0;i<5 ;i++ )
{
ready.WaitOne();//首先工作线程等待,直到工作线程准备好。
task="a".PadRight(i,'h'); //给工作任务赋值
go.Set(); //然后开始执行
}
ready.WaitOne();task=null;go.Set();
}
static void DoWorker()
{
while(true)
{
ready.Set(); //说明该线程已经准备好。
go.WaitOne(); //然后等待退出
if(task==null)return; //退出线程
Console.WriteLine(task);
}
}
#endregion
#region 测试线程jion方法
static void JoinThreadTest()
{
Thread t=new Thread(delegate()
{
//while(true)
//{
Console.ReadLine();
//}
});
t.Start();
t.Join();
Console.WriteLine("Thread ReadLine is complete!");
}
#endregion
static EventWaitHandle ready=new AutoResetEvent(false);
static EventWaitHandle go=new AutoResetEvent(false);
static volatile string task="";
static void WaitEventHandlerThreadTest()
{
//一个任务分解为多个线程来完成
new Thread(DoWorker).Start();
for (int i=0;i<5 ;i++ )
{
ready.WaitOne();//首先工作线程等待,直到工作线程准备好。
task="a".PadRight(i,'h'); //给工作任务赋值
go.Set(); //然后开始执行
}
ready.WaitOne();task=null;go.Set();
}
static void DoWorker()
{
while(true)
{
ready.Set(); //说明该线程已经准备好。
go.WaitOne(); //然后等待退出
if(task==null)return; //退出线程
Console.WriteLine(task);
}
}
#endregion
#region 测试线程jion方法
static void JoinThreadTest()
{
Thread t=new Thread(delegate()
{
//while(true)
//{
Console.ReadLine();
//}
});
t.Start();
t.Join();
Console.WriteLine("Thread ReadLine is complete!");
}
#endregion