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

  • 相关阅读:
    java.lang.NoClassDefFoundError: sun/swing/plaf/synth/SynthIcon
    微信数据库解密--代码报错:未定义标识符 HMAC_CTX_init
    Windows家庭版组策略编辑
    Visual Studio x64 使用 .asm 文件
    某数据库管理软件离线注册分析
    EV剪辑分析
    ciscn_lonelywolf
    arm-pwn
    libc-2.32.so在orw上与其他版本的区别
    更新libc
  • 原文地址:https://www.cnblogs.com/chucklu/p/4941669.html
Copyright © 2011-2022 走看看