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
總結
以上是生活随笔為你收集整理的DirectInput:poll轮询理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件成本度量方法及CMMI V2.0,你
- 下一篇: 程序员辞职卖卷饼:4天挣1个月工资!摆摊