3

C# で VB .NET 4 を使用して VS2010 でゲームを作成しました。ゲームはプレイヤーごとにスレッドを作成し、プレイヤーが作成した LUA コードを実行します。

各 LUA コードはスレッドをブロックしており、スレッドが終了したときにのみ終了する必要があります (LUA スクリプトには無限ループが含まれている必要があります)。

100% の CPU で数時間実行した後、現在コンピューターが過熱しているため、CPU 使用率を制限したいと考えています。

スレッド内で制御せずにスレッドを調整するにはどうすればよいですか? 一時停止/再開を強制するスレッド マネージャーが必要でしたが、それらは時代遅れになりつつあり、実行中の LUA コードが中止されるため、例外をスローしたくありません。

何か案は?

ありがとう!

4

3 に答える 3

7

これらのスレッドのスレッド優先度を低く設定することができます。これはシステムの応答性を維持するのに役立ちますが、それでも 100% の CPU を使用し、過熱することになるため、その方法については詳しく説明しません。

他のポスターが述べているように、小さなスリープを挿入するにはスレッドを取得する必要があります。それらをまったく制御できない場合は、他に何もできません。

ゲーム API を変更する必要があることをお勧めします。

コードで Lua コードを 1 回呼び出してから、Lua コードを無限ループさせるのではなく、Lua コードに「1 フレーム実行」機能を持たせることをお勧めします。次に、無限ループを独自のコードに移動し、「1 フレーム実行」関数を繰り返し呼び出します。

そうすれば、スリープを挿入したり、ログを追加したり、その他あらゆる種類の便利なことを行うことができます。

于 2012-08-08T21:06:08.930 に答える
1

無限ループ内のスレッドが CPU を消費しすぎないようにする一般的な方法は、反復ごとにスレッドを少しだけスリープさせることです (通常は 5 ミリ秒でうまくいきます)。これにより、他のリソースが CPU を使用できるようにする時間がシステムに与えられます。また、スレッドに最高の優先度を与えないでください。

于 2012-08-08T20:31:56.320 に答える