我使用SDL作爲我的遊戲項目的視圖部分。我想在不中斷主線程的情況下處理按鍵事件。所以我決定在另一個視圖線程中運行一個無限循環來捕獲任何事件並通知主線程。但是,我不確定這是否是最好的,因爲這可能會導致工作量並降低系統性能?有沒有更好的方法來做這種事情? 謝謝。使用SDL/C++處理事件的最佳方式是什麼
8
A
回答
7
不要打擾另一個線程。重點是什麼?
你的主線程做了什麼?我想是這樣的:
- 更新邏輯
- 渲染
- 轉到1
如果之後(或期間)接收輸入的更新週期,那麼你必須要等到下一次更新在你看到效果之前進行循環。渲染過程中也是如此。您也許只需在更新週期之前檢查輸入,然後全部執行單線程操作。
- 輸入
- 更新邏輯
- 渲染
- 轉到1
多線程這裏獲得什麼,只是增加了複雜性。
對於一些增加的閱讀,檢查出Christer Ericson's blog post about input latency(他是使戰神的團隊的技術主管)。
5
我想在不中斷主線程的情況下處理按鍵事件。
SDL本質上不是中斷或事件驅動框架。通過調用SDL_WaitEvent
或SDL_PollEvent
來從事件隊列中讀取事件,從而發生IO。這必須發生在「main」線程中,該線程調用SDL_SetVideoMode
。
這並不是說您不能使用多個線程,並且這樣做有很好的理由,例如,如果不需要依賴SDL事件循環,它可以簡化網絡通信。如果您希望模擬發生在單獨的線程中,則它可以通過同步的共享對象來回傳遞信息。特別是,您可以始終將事件安全地從任何線程放入SDL事件隊列中。
相關問題
- 1. 在Ember.js中處理事件的最佳方式是什麼?
- 2. 什麼是使用jsduck來記錄事件處理程序的最佳方式?
- 3. 處理MenuItem Click事件的最佳方法是什麼?
- 4. 在div上處理onchange事件的最佳方法是什麼?
- 5. 處理彼此使用模塊的最佳方式是什麼?
- 6. 使用PRISM處理導航的最佳方式是什麼?
- 7. 使用git repo處理.htaccess的最佳方式是什麼?
- 8. 什麼是在Java中處理延遲事件的最佳方式
- 9. 在Javascript中處理多個關鍵事件的最佳方式是什麼?
- 10. 處理變更管理的最佳方式是什麼?
- 11. 處理jQuery ajax異步調用的最佳方式是什麼?
- 12. 什麼是用Javascript處理時區的最佳方式
- 13. 用Promise處理分頁的最佳方式是什麼?
- 14. 使用PDO預處理語句的最佳方法是什麼?
- 15. 處理失敗的nonce驗證的最佳方式是什麼?
- 16. 什麼是處理失敗的Web請求的最佳方式?
- 17. 什麼是MVVM事件處理的最佳實踐
- 18. 在查找表中處理I18N的最佳方式是什麼?
- 19. 處理並行telnet連接的最佳方式是什麼?
- 20. 寫入批處理腳本的最佳方式是什麼?
- 21. 處理多臺顯示器的最佳方式是什麼?
- 22. 什麼是學習數字圖像處理的最佳方式?
- 23. 在WPF中處理驗證的最佳方式是什麼?
- 24. 處理視網膜顯示的最佳方式是什麼?
- 25. 處理django模型對象的最佳方式是什麼?
- 26. 處理大型數據表的最佳方式是什麼?
- 27. 處理此XML Feed的最佳方式是什麼?
- 28. 在Asp.Net MVC 3中處理DropDownListFor的最佳方式是什麼?
- 29. 在python中處理字典的最佳方式是什麼?
- 30. 處理SQLite數據庫的最佳方式是什麼?
這和輸入不是線程安全的。許多SDL教程都明確聲明瞭這一點。 – new123456 2011-07-18 22:35:10