zoukankan      html  css  js  c++  java
  • 关于ManualResetEvent信号机制。

    从字面上理解ManualResetEvent是手动重置事件(这个事件是代指第三方的事件实体)

    这个也是用于线程同步的。这个应该是保证 线程之间的执行顺序。

    常用的几个方法是:Reset(),set(),WaitOne()

    set()是将ManualResetEvent对象的value值设置为True

    Reset()是将ManualResetEnvent对象的Value值设置为False

    一般情况下ManualResetEnvent对象最起码是一个类里面的全局变量。

    当类里面有线程的时候就可以通过这个对象进行线程之间运行顺序的控制。就像我们用bool类型的全局变量控制线程循环的执行。因为这个东西不需要考虑线程的同步问题,bool值首先是值类型数据,赋值语句的操作无论如何在同一个时刻只要一个命令就可以操作完毕。ManualResetEnvent也是这个道理,它的值就是一个bool类型,我们不需要考虑ManualResetEnvent对象的线程同步问题(如果他都需要考虑线程同步问题,他还怎么控制线程呀)

    其控制线程的办法就是WaitOne()方法。这个语句的作用是将当前线程设置中断(前提WaitOne之前ManualResetEnvent的对象的值要是False),直到有其他线程调用ManualResetEnvent对象的Set()方法(这就可以理解为什么ManualResetEnvent对象一般为类的全局变量了),也就是把ManualResetEnvent对象的Value设置为True。当被中断的线程收到ManualResetEnvent的对象值为True值时才继续执行下面的语句有点类似这样的代码while(一个bool变量==False) sleep(1);

    其实这个ManualResetEnvent就是学操作系统里面时候讲到的解决进程线程同步问题的一个方法:信号机制。

    所以有人称为ManualResetEnvent的Set()方法为设置信号,Reset()为重置信号,WaitOne()为等待信号。


    ——

    于阅读GPS设备模拟器类源码所写。

  • 相关阅读:
    TMD 这个写笔记的号,盗了有意思吗
    类成员的指针必须NULL化,否则是乱七八糟的东西
    超前引用不可使用类名来定义变量和函数的变量参数,只可用来定义引用或者指针。
    XP下,移动窗口产生重影的问题
    生成ico格式图标
    设置窗口的z-order总是在最底部
    关于windows的锁定状态
    使用Layered Window遇到的一些问题及解决方法
    转-使用wifi调试程序
    URL的格式
  • 原文地址:https://www.cnblogs.com/edzjx/p/1778209.html
Copyright © 2011-2022 走看看