zoukankan      html  css  js  c++  java
  • 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()方法

  • 相关阅读:
    从远程库克隆(转载)
    添加远程库(转载)
    远程仓库(转载)
    maven+hudson构建集成测试平台
    maven_基本配置
    crawler_基础之_httpclient 访问网络资源
    crawler_jsoup HTML解析器_使用选择器语法来查找元素
    oracle_job 清空冗余数据 ,每一分钟执行一次
    oracle_根据ID(字符型)建立分区表
    crawler_基础之_java.net.HttpURLConnection 访问网络资源
  • 原文地址:https://www.cnblogs.com/tianboblog/p/5393444.html
Copyright © 2011-2022 走看看