我正在寫一個遊戲,其中一個線程的線程之間共享的數據同步再一次。我也有一個特製的事件處理程序與按鍵等如何使用暫停,然後恢復或替代
這一切工作在大多數情況下細交易。不過,如果GameThread渲染時引發事件,則會出現問題。在極少數情況下,處理事件的處理程序可能會對需要渲染的內容進行併發更改,以影響GameThread渲染的結果。
爲了避免這種情況,我想事件處理程序,立即暫停GameThread,處理事件,然後恢復GameThread。
的
suspend()
/resume()
方法適合我的需要,但他們被棄用。然而,就我而言,由於死鎖的可能性很小,不管使用它們是否安全?如果沒有,我有什麼其他選擇沒有一個巨大的開銷的金額是多少?
我看到了一個建議,要求線程暫停在線程中設置一個標誌暫停。然而,就我而言,我並不認爲這是一個可行的選擇,因爲GameThread循環在循環迭代期間可能需要一段時間。在完成循環之前,我將無法檢查標誌,屆時已經太晚了。
我需要立即暫停,否則用戶會注意到事件處理的延遲。
不推薦使用暫停/恢復的原因是因爲很難暫停/恢復線程權限,並且由應用程序開發人員來處理。帶有共享標誌的解決方案是最常用的。你可以發佈一些示例代碼 - 我認爲可以使用標誌並且仍然具有響應式應用程序。 – 2012-03-31 03:06:24