ManualResetEvent 类

它可以通知一个或多个正在等待的线程已发生事件,允许线程通过发信号互相通信,来控制线程是否可以访问资源

常用语法含义:

  1. ManualResetEvent manualEvent = new ManualResetEvent(true);//为true(signaled状态),一开始就可以执行,线程不能被阻塞
  2. ManualResetEvent manualEvent = new ManualResetEvent(false);//为flase(nonsignaled可阻塞状态),一开始就不可以执行
  3. manualEvent.Reset(); //将事件状态设置为非终止状态,导致线程阻止。
  4. manualEvent.Set(); //将事件状态设置为终止状态,允许一个或多个等待线程继续。
  5. manualEvent.WaitOne ();阻塞当前线程直到别的线程调用Set方法,只有ManualResetEvent 的状态是可阻塞(nonsignaled)时,WaitOne才能真正的起到作用;

//来自于 C# ManualResetEvent 类的用法_随风吹笛的博客-CSDN博客_manualresetevent

internal class Program{private static ManualResetEvent mre = new ManualResetEvent(false);static void Main(string[] args){Console.WriteLine("启动在ManualResetEvent上阻塞的3个线程");for (int i = 0; i <= 2; i++){Thread t = new Thread(ThreadProc);t.Name = "Thread_" + i;t.Start();}Thread.Sleep(500);Console.WriteLine("当所有三个线程都启动后,按Enter键调用Set ()去释放所有线程。");Console.ReadLine();mre.Set();Thread.Sleep(500);Console.WriteLine("当ManualResetEvent被发出信号时,调用WaitOne()的线程不会阻塞。按回车键来显示这个");Console.ReadLine();for (int i = 3; i <= 4; i++){Thread t = new Thread(ThreadProc);t.Name = "Thread_" + i;t.Start();}Thread.Sleep(500);Console.WriteLine("按Enter键调用Reset(),这样线程在调用WaitOne()时就会再次阻塞。");Console.ReadLine();mre.Reset();// 启动一个等待ManualResetEvent的线程。Thread t5 = new Thread(ThreadProc);t5.Name = "Thread_5";t5.Start();Thread.Sleep(500);Console.WriteLine("\nPress Enter to call Set() and conclude the demo.");Console.ReadLine();mre.Set();Console.ReadLine();}private static void ThreadProc(){string name = Thread.CurrentThread.Name;Console.WriteLine(name + " 启动并调用mre.WaitOne()");mre.WaitOne();Console.WriteLine(name + " ends.");}}

C# ManualResetEvent 类的理解相关推荐

  1. C# “Thread类Suspend()与Resume()已过时” 解决方法(利用ManualResetEvent类)

    C# "Thread类Suspend()与Resume()已过时" 解决方法(利用ManualResetEvent类) 参考文章: (1)C# "Thread类Suspe ...

  2. java类的理解_Java类该怎么理解?

    感觉你对java的各种数据类型可能理解不够吧. 整体了解一下各个数据类型,你的问题就清楚了: java的基础数据类型有: byte.short.int.long.float.double.char.数 ...

  3. 线程 ManualResetEvent 类

    Reset(): 当一个线程开始一个活动(此活动必须完成后,其他线程才能开始)时, 它调用 Reset 以将 ManualResetEvent 置于非终止状态.此线程可被视为控制 ManualRese ...

  4. VBA 类模块理解和使用总结

    目 录 VBA 类模块理解和使用总结 一.类的概念 二.类的定义 三.类详细定义 关于封装 关于多态 关于异常 关于自定义事件 四.结论: VBA 类模块理解和使用总结 一.类的概念 记得有人总结,V ...

  5. AtomicInteger类的理解与使用

    前言 JDK1.5之后的java.util.concurrent.atomic包里,多了一批原子处理类.AtomicBoolean.AtomicInteger.AtomicLong.AtomicRef ...

  6. Python中type的使用和元类的理解

            "元类就是深度的魔法,99%的用户应该根本不必为此操心.如果你想搞清楚究竟是否需要用到元类,那么你就不需要它.那些实际用到元类的人都非常清楚地知道他们需要做什么,而且根本不需 ...

  7. python 类实例化理解

    让我们以一个Foo类开始: class Foo(object):def __init__(self, x, y=0):self.x = xself.y = y 当你实例化它(即创建该类的一个新的实例) ...

  8. python中的类怎样理解_理解Python数据类:Dataclass fields 的概述(下)

    原标题 Understanding Python Dataclasses?-?Part 2 ,作者为 Shikhar Chauhan . 这是 Python 最新的 Dataclasses 系列的第二 ...

  9. python中的元类_理解python中的元类

    一,理解类也是对象 在python中类同样也是一种对象,只要使用关键字class,Python解释器在执行的时候就会创建一个对象,这个对象(类)自身拥有创建对象(类实例)的能力,这就是为什么他是一个类 ...

  10. python中的类怎样理解_深入理解Python中的元类(metaclass)

    如何理解python当中的元类 把这个提到外面 class __metaclass__(type): " simple custom metaclass to block adding ne ...

最新文章

  1. 前端性能优化之gzip
  2. web页面渲染(二)
  3. caffe多个gpu数据合并到一起
  4. 5.30 Tree Traversal + Tree manipulation
  5. Zabbix JVM 安装
  6. java代码防止sql注入_动态Java代码注入
  7. Android 编程下的四大组件之服务(Service)
  8. 素数筛法求十亿内所有质数的和(C++)
  9. Oracle数据库的备份与恢复技术
  10. java mybatis 搭建_mybatis环境搭建(转载)
  11. FileSync文件同步更新工具
  12. python手机版做小游戏代码大全-20行python代码的入门级小游戏的详解
  13. Python PDF转图片 Word
  14. VS 报错“无法解析的外部符号” 情况1
  15. NPDP知识推送-第七章产品生周期管理(4)
  16. python:文件读取和存储
  17. 数据结构与算法: 约瑟夫问题(丢手绢)
  18. CoAP学习笔记(1)CoAP报文结构
  19. QN8035 FM收音机芯片 驱动程序
  20. HTTP协议与网络编程(二)HTTP消息

热门文章

  1. css元素背景图片自适应屏幕大小
  2. 地理空间搜索 ->R树索引
  3. typora下载百度网盘
  4. Word解析之Word内部结构
  5. ds18b20温度转换指令_使用STM32控制DS18B20温度传感器
  6. java面向对象之实现房屋出租系统
  7. 图像标注工具labelImg使用
  8. 昆仑通态触摸屏如何把参数由触摸屏传递到PLC_西门子PLC与触摸屏、变频器的恒压供水分享...
  9. 注册登录后才可以下载的源码_专注爬虫:20个精心总结爬虫项目,爬虫技术这里强(附源码)...
  10. 机器视觉可以应用到哪些场景中?