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)。

转载于:https://www.cnblogs.com/FWFC/p/8985026.html

DirectInput:poll轮询理解相关推荐

  1. (十一)linux之poll轮询

    目录 (一)poll轮询的作用 (二)poll轮询相关的接口 (三)poll使用流程 (四)实例代码 (一)poll轮询的作用 以阻塞的方式打开文件,那么对多个文件读写时,若某个文件未准备好,则系统会 ...

  2. javaweb认识在web应用中重要的轮询机制(ajax)

    **轮询是用来解决服务器压力过大的问题的.**如果保持多个长连接,服务器压力会过大,因此.专门建立一个轮询请求的接口,里面只保留一个任务id,只需要发送任务id,就可以获取当前任务的情况.如果返回了结 ...

  3. 4.1.3 消费者轮询的流程

    4.1.3 消费者轮询的流程 按照消费者应用程序的示例,消费者订阅主题的下一步是"轮询".前面分析的准备t作(确保协调者存在,确保分配分区,更新拉取偏移量)都内置在轮询操作里,所以 ...

  4. nginx负载均衡之加权轮询

    当nginx作为代理服务器时,需要将客户端的请求转发给后端服务器进行处理,如果后端服务器有多台,那如何选择合适的后端服务器来处理当前请求,也就是本篇文章要介绍的内容.nginx尽可能的把请求分摊到各个 ...

  5. nodejs的事件轮询机制

    /* 面试题:nodejs的事件轮询机制*/setTimeout(function() {console.log('setTimeout()') }, 0)setImmediate(function( ...

  6. linux轮询脚本,linux驱动的等待队列(阻塞操作)和轮询(poll),缓冲区笔记

    觉得还是贴代码最直接,以后要用的时候也方便参考. 先是相应驱动的详细代码: /* linux/drivers/char/sep4020_char/sep4020_fifo.c * * Copyrigh ...

  7. java多线程方式轮询,深入理解JAVA多线程之线程间的通信方式

    一,介绍 本总结我对于JAVA多线程中线程之间的通信方式的理解,主要以代码结合文字的方式来讨论线程间的通信,故摘抄了书中的一些示例代码. 二,线程间的通信方式 ①同步 这里讲的同步是指多个线程通过sy ...

  8. DPDK PMD( Poll Mode Driver)轮询模式驱动程序

    DPDK PMD( Poll Mode Driver)轮询模式驱动程序 目录 Mellanox PMDs 轮询模式驱动程序 要求和假设 设计原则 逻辑核心,内存和NIC队列关系 设备标识,所有权和配置 ...

  9. 基于Redis的incr、发布订阅防并发和setnx、轮询防并发的理解

    先上代码: 1.incr.发布订阅防并发 package com.xxx.epps.sfeicuss.common.anticoncurrency;import com.xxx.epps.sfeicu ...

最新文章

  1. java中对Excel的创建、样式修改
  2. 和12岁小同志搞创客开发:手撕代码,点亮LED灯
  3. 如何用Python玩转比特币?(附源码)
  4. b树与b+树的区别_Linux内核-数据结构系列(B树、B-树、B+树)的区别
  5. 关于request.setAttribute多页传值,多页取值
  6. jQuery |淡入淡出
  7. coherence安装_Oracle Coherence:分布式数据管理
  8. AD16画线时如何切换90°、45°、任意角度画线模式
  9. 宠物狗图片分类之迁移学习代码笔记
  10. mysql中的派生表
  11. (71)Verilog HDL时间度量系统函数:$time
  12. 【HDU-5246】超级赛亚ACMer(贪心)
  13. 区分clientHeight、scrollHeight、offsetHeight
  14. 修改虚拟机设置过游戏检测
  15. 用友打印问题合集 二【各模块】
  16. 西部数据移动硬盘真伪测试软件,如何查询西数移动硬盘的真伪
  17. Theano介绍及简单应用
  18. 24位真彩色图片取摸方法(用于WS2812显示)
  19. 仿微信个人二维码切换样式
  20. Oracle错误——归档日志已满问题

热门文章

  1. Linux-SFTP/SSH免密码登录
  2. java对mysql排序_MySQL 排序
  3. Java中 break、continue 和 return三者之间的区别
  4. 搭建私有Git服务器
  5. 安卓多语言设置,深渊巨坑,适配7.0以上,并且解决因WebView产生的问题
  6. python知识:@classmethod和@staticmethod的异同
  7. linux进程map,linux下unordered_map和map在小数据下性能差异
  8. java mina长连接短连接_MINA实现TCP长连接(四)——断开重连
  9. python输出日志文件_python将print输出的信息保留到日志文件中
  10. 2021-02-21 代码不规范,运维两行泪 代码规范