六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 98|回复: 0

AutoResetEvent和ManualResetEvent的异同

[复制链接]

升级  16%

184

主题

184

主题

184

主题

进士

Rank: 4

积分
580
 楼主| 发表于 2013-1-1 21:56:53 | 显示全部楼层 |阅读模式
<div id="cnblogs_post_body">一般情况下多线程总是无序的,要使其按照一定的顺序执行(比如B线程必须在A线程执行完毕之后才执行)。可以采用调用Thread的Join方式,也可以使用“信号”类的方式完成此任务。常见的信号类有AutoResetEvent和ManualResetEvent。一般情况下,可以给它们的默认构造函数传入false,这就表示当前初始化该信号源准备发送信号,当调用了WaitOne方法的时候把当前的线程阻塞,直到接受到信号为止(发送信号使用Set函数)。下面是一个例子:
[C#]
<div class="cnblogs_code">public class Example    {        /// <summary>        /// 预备信号,准备发送,初始化        /// </summary>        public static AutoResetEvent flag = new AutoResetEvent(false);        public void Begin()        {            Thread th = new Thread(() =>             {                for (int i = 1; i < 6; i++)                {                    Thread.Sleep(1000);                    Console.WriteLine("子线程数据:"+i);                }                flag.Set();            });            th.IsBackground = true;            th.Start();        }        static void Main(string[] args)        {            Example e = new Example();            e.Begin();            //等待该信号接受到完毕,才执行主线程中的任务循环            flag.WaitOne();            for (int i = 1; i < 6; i++)            {                  Thread.Sleep(1000);                  Console.WriteLine("主线程数据:"+i);            }        }    }
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表