zoukankan      html  css  js  c++  java
  • DirectInput:poll轮询理解

    DirectInput中,在Acquire之后就已经获取了设备控制,为什么还要多一步poll轮询呢?而且轮询和Acquire的先后顺序又是什么呢?对此一直不理解的我,查了MSDN,终于明白了这个轮询的意思。MSDN原文如下:

      

     同样,翻译如下:

      从在一个DirectInput 设备上被轮询的设备中获取数据。如果这个设备没有请求轮询,则调用这个方法没有效果。如果一个请求轮询的设备未被定期轮询,那么不会从这个设备上接收到新的数据。调用这个方法导致DirectInput去更新设备状态,产生输入事件(如果缓冲区数据可用),并且设置通知事件(如果通知可用)。

    返回值

      如果这个方法成功,返回值是DI_OK,如果设备没有要求轮询,返回DI_NOEFFECT。如果调用失败,返回值会是以下错误值之一:DIERR_INPUTLOST, DIERR_NOTACQUIRED, DIERR_NOTINITIALIZED.

    注意:

      在一个设备数据能够被轮询之前,它的数据格式必须通过使用IDirectInputDevice8::SetDataFormat或IDirectInputDevice8:SetActionMap方法设置,并且设备必须被通过使用IDirectInputDevice8 接口方法被获取。

      另外说一下轮询在操作系统中的作用:大致来讲,就是cpu通过访问外设,询问外设是否有轮询请求(例如数据需要更新),如果需要,就将外设的最新更新过的状态保存到系统自己的缓冲区中。而我们则需要通过IDirectInputDevice8::GetDeviceState方法来告诉操作系统将保存外设最新状态的系统缓冲区的数据复制到自己传入的缓冲区中。

      那么到这里其实就显的很明白了。顺序上肯定是需要先Acquire再Poll的,原因就是MSDN上注意(Remarks)中所说的,在设备数据被轮询之前,必须先获取(acquire)。

  • 相关阅读:
    按次计费简单实现思路
    java读取和写入excel
    SpringBoot定时任务自动停止关闭
    class path resource [applicationContext.xml] cannot be opened because it does not exist
    Tomcat安装配置idea
    Git rebase
    MongoDB高可用集群配置方案
    keepalived主从及双主配置
    openssl 生成免费证书
    Nginx proxy_cache 缓存静态文件
  • 原文地址:https://www.cnblogs.com/FWFC/p/8985026.html
Copyright © 2011-2022 走看看