• ManualResetEvent


    线程是程序中的控制流程的封装。你可能已经习惯于写单线程程序,也就是,程序在它们的代码中一次只在一条路中执行。如果你多弄几个线程的话,代码运行可能 会更加“同步”。

    在一个有着多线程的典型进程中,零个或更多线程在同时运行。但是,在有着N个CPU的机器上,一个线程只能在给定的时间上在一个CPU上 运行,因为每个线程都是一个代码段,每个CPU一次只能运行一段代码。而看起来像是N个同时完成是线程间共享CPU时间片的效果。

    这个例子里,我们将创建 另一个线程,我们将用两个线程演示多线程的工作方式,最后,我们实现两个线程(主线程与新线程)同步,在新线程工作前必须等待消息。建立线程前我们必须引 入System.Threading命名空间。然后我需要知道的是,线程得为控制流程建立一个起点。起点是一个函数,可以使一个相同的调用或其它。
    这里你可以看到在同一个类中定义的起点函数。

        class ThreadClass
        {
            public static ManualResetEvent mre = new ManualResetEvent(false);
            public static void trmain()
            {
                Thread tr = Thread.CurrentThread;
                Console.WriteLine("thread: waiting for an event");
                mre.WaitOne();
                Console.WriteLine("thread: got an event");
                for (int x = 0; x < 10; x++)
                {
                    Thread.Sleep(1000);
                    Console.WriteLine(tr.Name + ": " + x);
                }
            }
            static void Main(string[] args)
            {
                Thread thrd1 = new Thread(new ThreadStart(trmain));
                thrd1.Name = "thread1";
                thrd1.Start();
                for (int x = 0; x < 10; x++)
                {
                    Thread.Sleep(900);
                    Console.WriteLine("Main:" + x);
                    if (5 == x) mre.Set();
                }
                while (thrd1.IsAlive)
                {
                    Thread.Sleep(1000);
                    Console.WriteLine("Main: waiting for thread to stop");
                }
            }
        }
    

     

    当初始化为true时,为终止状态

    static ManualResetEvent _mre = new ManualResetEvent(true);

    当初始化为false时,为非终止状态

    static ManualResetEvent _mre = new ManualResetEvent(false);
     

    终止状态时WaitOne()允许线程访问下边的语句

    非终止状态时WaitOne()阻塞线程,不允许线程访问下边的语句

    把非终止状态改为终止状态用Set()方法

    把终止状态改为非终止状态用Reset()方法

  • 相关阅读:
    Windows下MySQL8.0.23的下载与安装简单易用
    【转】decimal double的区别
    【转】.NET垃圾回收
    vs2010 断点调试故障 反编译插件引起的
    【摘】别人对面向对象的理解
    【转】C# indexof
    【转】八大排序算法总结
    【转】JS windows.open()详解
    【转】with as
    【转】SQL Server的几种约束
  • 原文地址:https://www.cnblogs.com/tianboblog/p/5393444.html
Copyright © 2020-2023  润新知