zoukankan      html  css  js  c++  java
  • AutoResetEvent

     private static readonly AutoResetEvent autoResetEvent = new AutoResetEvent(false);
            private static void Main()
            {
                try
                {
                    Console.WriteLine("{1}线程={0}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                    Thread thread = new Thread(Method)
                    {
                        IsBackground = true
                    };
                    thread.Start();
                    autoResetEvent.WaitOne();
                    Console.WriteLine("Hello World");
                }
                catch (Exception ex)
                {
                    while (ex != null)
                    {
                        Console.WriteLine(ex.Message);
                        ex = ex.InnerException;
                    }
                }
                Console.ReadLine();
            }
    
            private static void Method()
            {
                Thread.Sleep(2000);
                Console.WriteLine("{1}线程={0}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                autoResetEvent.Set();
            }
      private static readonly AutoResetEvent autoResetEvent = new AutoResetEvent(false);
            private static void Main()
            {
                try
                {
                    Console.WriteLine("{1}线程={0}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                    Thread thread = new Thread(Method)
                    {
                        IsBackground = true
                    };
                    thread.Start();
                    bool flag = autoResetEvent.WaitOne(1000);//这里只等待1秒,但是线程里的Set需要2秒之后才执行
                    if (flag)
                    {
                        Console.WriteLine("Hello World");
                    }
                    autoResetEvent.WaitOne();//这里会受到上一次的Set的影响,可以直接执行
                    Console.WriteLine("Hello Chuck");
                    autoResetEvent.WaitOne();
                    Console.WriteLine("To be continued");
                }
                catch (Exception ex)
                {
                    while (ex != null)
                    {
                        Console.WriteLine(ex.Message);
                        ex = ex.InnerException;
                    }
                }
                Console.ReadLine();
            }
    
            private static void Method()
            {
                Thread.Sleep(2000);
                Console.WriteLine("{1}线程={0}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                autoResetEvent.Set();
            }

    总结,AutoResetEvent在WaitOne之前需要先调用Reset,以防止之前某次超时之后,有其他地方调用了Set,那样会导致下一次的WaitOne可以直接进入

  • 相关阅读:
    给力牛人
    设计模式
    微软真的要放弃Windows品牌吗?
    SQL2005 Express 自动安装之命令行
    SQL where之 in 在变量
    数据库求闭包,求最小函数依赖集,求候选码,判断模式分解是否为无损连接,3NF,BCNF
    别浪费了你的大内存[转]
    QQ空间免费养5级花和拥有人参果
    asp.net2 统一搜索引擎关键字编码[转]
    把网速提高4倍的方法和动画教程
  • 原文地址:https://www.cnblogs.com/chucklu/p/4941669.html
Copyright © 2011-2022 走看看