zoukankan      html  css  js  c++  java
  • 浅尝《Windows核心编程》之 内核对象

    1.       内核对象

    内核对象主要要用来供系统和应用程序管理系统资源,像进程、线程、文件等。存取符号对象、事件对象、文件对象、作业对象、互斥对象、管道对象、等待计时器对象等都是内核对象。内核对象由内核拥有,并不是进程所拥有。

    具体可以参见这位大哥的文章

    http://www.cnblogs.com/xuyuan77/archive/2008/04/23/1167623.html

     

    2.       通知

    当内核对象得到通知时,其状态变为“已通知”,否则就是“未通知”。当线程等待的对象处于“为通知”状态下,线程不可调度,否则为可调度。

     

    3.       各个内核对象的内核对象和线程同步之间的关系

     

     

    4.       几种常用的内核对象介绍

    (1)       进程(略)

    (2)       线程(略)

    (3)       事件(EVENT

          1. 创建

    HANDLE WINAPI CreateEvent(
      __in_opt  LPSECURITY_ATTRIBUTES lpEventAttributes,
      __in      BOOL bManualReset,
      __in      BOOL bInitialState,
      __in_opt  LPCTSTR lpName);
     

      通常第一参数和第四参数设为NULL。
      第二参数表示是否要人工重置。人工重置和自动重置的区别如下:当人工重置的时间得
    到通知时,等待该时间的所有线程均变成可调度线程,当一个自动重置的时间得到通知时,
    等待该时间的线程中只有一个线程变为可调度线程(因为os对线程的调度而随机选择)。其
    中的实质就是Microsoft为自动重置的时间定义了应该成功等待的副作用规则,即当线程成功
    地等待到该对象时(意思是一个等待的线程因为得到通知状态而被激活),自动重置的事件
    就会自动重置到未通知状态(其他等待这个事件的线程又被挂起了)。
      第三参数为初始状态,false表示未通知状态,true表示通知状态。

     2. 修改状态

    动态改为通知状态的函数为SetEvent(),动态改为未通知状态的函数是ResetEvent().

     

     3. 关闭事件

    CloseHandle()

     

     (4)     等待定时器

    几个例子,见《Windows核心编程》第六章P204

        等待计时器和定时器的区别

     

        最后要说明的是,凡是称职的 Wi n d o w s编程员都会立即将等待定时器与用户定时器(用S e t Ti m e r函数进行设置)进行比较。它们之间的最大差别是,用户定时器需要在应用程序中设置许多附加的用户界面结构,这使定时器变得资源更加密集。另外,等待定时器属于内核对象,这意味着它们可以供多个线程共享,并且是安全的。

        用户定时器能够生成W M _ T I M E R消息,这些消息将返回给调用 S e t Ti m e r(用于回调定时器)的线程和创建窗口(用于基于窗口的定时器)的线程。因此,当用户定时器报时的时候,只有一个线程得到通知。另一方面,多个线程可以在等待定时器上进行等待,如果定时器是个人工重置的定时器,则可以调度若干个线程。

        如果要执行与用户界面相关的事件,以便对定时器作出响应,那么使用用户定时器来组织代码结构可能更加容易些,因为使用等待定时器时,线程必须既要等待各种消息,又要等待内核对象(如果要改变代码的结构,可以使用 M s g Wa i t F o r M u l t i p l e O b j e c t s函数)。最后,运用等待定时器,当到了规定时间的时候,更有可能得到通知。

               W M _ T I M E R消息始终属于最低优先级的消息,当线程的队列中没有其他消息时,才检索该消息。等待定时器的处理方法与其他内核对象没有什么差别,如果定时器发出报时信息,而你的线程正在等待之中,那么你的线程就会醒来。

     

     

  • 相关阅读:
    centos 编码问题 编码转换 cd到对应目录 执行 中文解压
    centos 编码问题 编码转换 cd到对应目录 执行 中文解压
    centos 编码问题 编码转换 cd到对应目录 执行 中文解压
    Android MVP 十分钟入门!
    Android MVP 十分钟入门!
    Android MVP 十分钟入门!
    Android MVP 十分钟入门!
    mysql备份及恢复
    mysql备份及恢复
    mysql备份及恢复
  • 原文地址:https://www.cnblogs.com/aicro/p/1501224.html
Copyright © 2011-2022 走看看