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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值