我正在编写一个游戏,其中一个线程 - GameThread - 永远循环,更新我所有的精灵,渲染它们,然后在再次执行之前休眠一段时间。我还有一个定制的事件处理程序来处理按键等。
在大多数情况下,这一切都很好。但是,如果在 GameThread 渲染时引发事件,我会遇到问题。在极少数情况下,处理事件的处理程序可能会对需要渲染的内容进行并发更改,从而影响 GameThread 渲染的结果。
为了避免这种情况,我希望事件处理程序立即暂停 GameThread,处理事件,然后恢复 GameThread。
suspend()
/方法适合我的resume()
需要,但它们已被弃用。但是,就我而言,由于死锁的可能性很小,无论如何使用它们是否安全?如果不是,我还有哪些其他替代方案不会产生大量开销?
我看到了通过在要暂停的线程中设置标志来请求线程暂停的建议。然而,就我而言,我认为这不是一个可行的选择,因为 GameThread 循环在循环迭代期间可能需要一段时间。在我完成循环之前,我将无法检查标志,到那时为时已晚。
我需要立即暂停,否则用户会注意到事件处理的延迟。