スレッド - GameThread - が永遠にループし、すべてのスプライトを更新し、レンダリングし、しばらくスリープしてからすべてをやり直すゲームを書いています。キーの押下などを処理するカスタムメイドのイベントハンドラーもあります。
ほとんどの場合、これで問題なく動作します。ただし、GameThread のレンダリング中にイベントがスローされると問題が発生します。まれに、イベントを処理するハンドラーが、レンダリングする必要があるものを同時に変更し、GameThread レンダリングの結果に影響を与える場合があります。
これを回避するには、イベント ハンドラーで GameThread をすぐに一時停止し、イベントを処理してから、GameThread を再開する必要があります。
suspend()/メソッドはresume()私のニーズに合っていますが、廃止されました。ただ、私の場合はデッドロックの可能性が少ないので、そのまま使っても大丈夫でしょうか?いいえの場合、オーバーヘッドが大きくない他の代替手段はありますか?
一時停止するスレッドにフラグを設定して、スレッドの一時停止を要求するという提案を見たことがあります。ただし、私の場合、ループの反復中に GameThread ループに時間がかかる可能性があるため、実行可能なオプションとは思えません。ループが完了するまでフラグをチェックすることはできず、それまでには手遅れです。
すぐに一時停止する必要があります。そうしないと、ユーザーがイベント処理の遅延に気付くことになります。