C ManualResetEvent 类的用法

                       

先说是一下  ManualResetEvent 是一线程用来控制别一个线程的信号。大家可以把它看成 操作系统原理中说到的pv操作

如下图所说是 ManualResetEvent 对象起一个信使的作用。

ManualResetEvent 对象的两个控制方法。
1、this.manualEvent.Reset(); //将事件状态设置为非终止状态,导致线程阻止。
2、this.manualEvent.Set();   //将事件状态设置为终止状态,允许一个或多个等待线程继续。

说了这么多光说不做还真没有用,接下来看代码!

class MyThread        {            Thread t = null;            ManualResetEvent manualEvent = new ManualResetEvent(true);//为trur,一开始就可以执行            private void Run()            {                while (true)                {                    this.manualEvent.WaitOne();                    Console.WriteLine("这里是  {0}", Thread.CurrentThread.ManagedThreadId);                    Thread.Sleep(5000);                }            }            public void Start()            {                this.manualEvent.Set();            }            public void Stop()            {                this.manualEvent.Reset();            }            public MyThread()            {                t = new Thread(this.Run);                t.Start();            }        }
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

在 main 方法中要用到上面的类

static void Main(string[] args)        {            MyThread myt = new MyThread();            while (true)            {                Console.WriteLine("输入 stop后台线程挂起 start 开始执行!");                string str = Console.ReadLine();                if (str.ToLower().Trim() == "stop")                {                    myt.Stop();                }                if (str.ToLower().Trim() == "start")                {                    myt.Start();                }            }        }
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

原理就说完了我们来看一下程序运行的结果!

文章转载自C# ManualResetEvent 类的用法,感谢作者 蒋乐兴 提供好文章

           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值