DirectInput:poll轮询理解
DirectInput中,在Acquire之后就已經(jīng)獲取了設(shè)備控制,為什么還要多一步poll輪詢呢?而且輪詢和Acquire的先后順序又是什么呢?對(duì)此一直不理解的我,查了MSDN,終于明白了這個(gè)輪詢的意思。MSDN原文如下:
同樣,翻譯如下:
從在一個(gè)DirectInput 設(shè)備上被輪詢的設(shè)備中獲取數(shù)據(jù)。如果這個(gè)設(shè)備沒(méi)有請(qǐng)求輪詢,則調(diào)用這個(gè)方法沒(méi)有效果。如果一個(gè)請(qǐng)求輪詢的設(shè)備未被定期輪詢,那么不會(huì)從這個(gè)設(shè)備上接收到新的數(shù)據(jù)。調(diào)用這個(gè)方法導(dǎo)致DirectInput去更新設(shè)備狀態(tài),產(chǎn)生輸入事件(如果緩沖區(qū)數(shù)據(jù)可用),并且設(shè)置通知事件(如果通知可用)。
返回值
如果這個(gè)方法成功,返回值是DI_OK,如果設(shè)備沒(méi)有要求輪詢,返回DI_NOEFFECT。如果調(diào)用失敗,返回值會(huì)是以下錯(cuò)誤值之一:DIERR_INPUTLOST, DIERR_NOTACQUIRED, DIERR_NOTINITIALIZED.
注意:
在一個(gè)設(shè)備數(shù)據(jù)能夠被輪詢之前,它的數(shù)據(jù)格式必須通過(guò)使用IDirectInputDevice8::SetDataFormat或IDirectInputDevice8:SetActionMap方法設(shè)置,并且設(shè)備必須被通過(guò)使用IDirectInputDevice8 接口方法被獲取。
?
另外說(shuō)一下輪詢?cè)诓僮飨到y(tǒng)中的作用:大致來(lái)講,就是cpu通過(guò)訪問(wèn)外設(shè),詢問(wèn)外設(shè)是否有輪詢請(qǐng)求(例如數(shù)據(jù)需要更新),如果需要,就將外設(shè)的最新更新過(guò)的狀態(tài)保存到系統(tǒng)自己的緩沖區(qū)中。而我們則需要通過(guò)IDirectInputDevice8::GetDeviceState方法來(lái)告訴操作系統(tǒng)將保存外設(shè)最新?tīng)顟B(tài)的系統(tǒng)緩沖區(qū)的數(shù)據(jù)復(fù)制到自己傳入的緩沖區(qū)中。
那么到這里其實(shí)就顯的很明白了。順序上肯定是需要先Acquire再Poll的,原因就是MSDN上注意(Remarks)中所說(shuō)的,在設(shè)備數(shù)據(jù)被輪詢之前,必須先獲取(acquire)。
轉(zhuǎn)載于:https://www.cnblogs.com/FWFC/p/8985026.html
總結(jié)
以上是生活随笔為你收集整理的DirectInput:poll轮询理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 软件成本度量方法及CMMI V2.0,你
- 下一篇: 程序员辞职卖卷饼:4天挣1个月工资!摆摊