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可以直接进入

  • 相关阅读:
    iOS 相册相机应用2
    运行时啊
    在iOS开发的Quartz2D使用中实现图片剪切和截屏功能
    内购
    自制数据挖掘工具分析北京房价 (二) 数据清洗
    数据挖掘工具分析北京房价 (一) 数据爬取采集
    程序员讨论 《黑客帝国》 (三) 情感
    程序员讨论《黑客帝国》(二)平衡和进化
    程序员讨论《黑客帝国》(一)真实与虚拟
    类库与框架,强类型与弱类型的闲聊
  • 原文地址:https://www.cnblogs.com/chucklu/p/4941669.html
Copyright © 2011-2022 走看看