私は C# が初めてで、複数のタイマーを必要とするプログラムに取り組んでいます。
プログラムが CPU を集中的に使用するコードを実行しているときに、プログラム内のすべてのタイマーを同時に一時停止する方法があるかどうか疑問に思っていました。
現時点では、現在有効になっているタイマーは、集中的な操作中に発生したすべてのタイマー イベントに追いつこうとします。
私は C# が初めてで、複数のタイマーを必要とするプログラムに取り組んでいます。
プログラムが CPU を集中的に使用するコードを実行しているときに、プログラム内のすべてのタイマーを同時に一時停止する方法があるかどうか疑問に思っていました。
現時点では、現在有効になっているタイマーは、集中的な操作中に発生したすべてのタイマー イベントに追いつこうとします。
これらのタイマーのリストを作成し (それらをアクティブにする場合)、これらのタイマーを手動で無効にできると思います ( Timer.Changeメソッドを使用)。
リストで作成したすべてのタイマーを追跡し、それらを実行したくない場合は change メソッドを呼び出す必要があります。
List<System.Threading.Timer> TimerList = new List<System.Threading.Timer>();
Timer stateTimer = new Timer(tcb, autoEvent, 1000, 250);
Timer responseTimer = new Timer(tcb, autoEvent, 1000, 250);
TimerList.add(stateTimer);
TimerList.add(responseTimer);
foreach (System.Threading.Timer t in TimerList)
{
T.Change(TimeSpan(0), new(TimeSpan(0));
}
.NET フレームワークでは、実行中のすべての Threading.Timer インスタンスのリストを取得する方法はありません。ただし、実行中のすべてのタイマーをリストに追加し、もちろんタイマーが終了するとそれらを削除する独自のタイマー ラッパーを作成できます。
CPU がアイドル状態のときにのみメソッドが実行されるようにする場合は、タイマーのスレッド優先度を低い値に設定できます。