博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

细分线程的等待(WaitAny,WaitAll),区别于Thread.Join

Posted on 2008-06-16 11:08  懒人ABC  阅读(2437)  评论(0编辑  收藏  举报
关键字:
     WaitHandle,
        封装等待对共享资源的独占访问的操作系统特定的对象。
        使用此类的静态方法阻塞一个线程,直到一个或多个同步对象接收到信号。
     WaitAll,等待所有指定执行线程结束之后返回。
     WaitAny,等待任何一个指定执行线程结束之后返回。
     AutoResetEvent,
        该类表示一个本地等待处理事件,在释放了单个等待线程以后,该事件会在终止时自动重置。
     ManualResetEvent
        不会自动重新设置。

例子:
AutoResetEvent event1 = new AutoResetEvent(false);
AutoResetEvent event2 = new AutoResetEvent(false);
AutoResetEvent event3 = new AutoResetEvent(false);

public void Use3ChildThreads()
{
    Thread vThread1 = new Thread(new ThreadStart(Method1));
    Thread vThread2 = new Thread(new ThreadStart(Method2));
    Thread vThread3 = new Thread(new ThreadStart(Method3));

    AutoResetEvent[] vEventInProgress = new AutoResetEvent[3];
    {
         event1,
         event2,
         event3
    }

    vThread1.Start();
    vThread2.Start();
    vThread3.Start();

    WaitHandle.WaitAny(vEventInProgress);

    //continue code

}

public void Method1()
{
    Thread.Sleep(1000);
    event1.Set();
}

public void Method2()
{
    Thread.Sleep(2000);
    event2.Set();
}

public void Method3()
{
    Thread.Sleep(3000);
    event3.Set();
}