2010-11-13 153 views
8

我使用SDL作爲我的遊戲項目的視圖部分。我想在不中斷主線程的情況下處理按鍵事件。所以我決定在另一個視圖線程中運行一個無限循環來捕獲任何事件並通知主線程。但是,我不確定這是否是最好的,因爲這可能會導致工作量並降低系統性能?有沒有更好的方法來做這種事情? 謝謝。使用SDL/C++處理事件的最佳方式是什麼

回答

7

不要打擾另一個線程。重點是什麼?

你的主線程做了什麼?我想是這樣的:

  1. 更新邏輯
  2. 渲染
  3. 轉到1

如果之後(或期間)接收輸入的更新週期,那麼你必須要等到下一次更新在你看到效果之前進行循環。渲染過程中也是如此。您也許只需在更新週期之前檢查輸入,然後全部執行單線程操作。

  1. 輸入
  2. 更新邏輯
  3. 渲染
  4. 轉到1

多線程這裏獲得什麼,只是增加了複雜性。

對於一些增加的閱讀,檢查出Christer Ericson's blog post about input latency(他是使戰神的團隊的技術主管)。

+0

這和輸入不是線程安全的。許多SDL教程都明確聲明瞭這一點。 – new123456 2011-07-18 22:35:10

5

我想在不中斷主線程的情況下處理按鍵事件。

SDL本質上不是中斷或事件驅動框架。通過調用SDL_WaitEventSDL_PollEvent來從事件隊列中讀取事件,從而發生IO。這必須發生在「main」線程中,該線程調用SDL_SetVideoMode

這並不是說您不能使用多個線程,並且這樣做有很好的理由,例如,如果不需要依賴SDL事件循環,它可以簡化網絡通信。如果您希望模擬發生在單獨的線程中,則它可以通過同步的共享對象來回傳遞信息。特別是,您可以始終將事件安全地從任何線程放入SDL事件隊列中。

相關問題