これはどのように動作するのかちょっと混乱します。 XMLファイルに複数のオブジェクトが保存されていて、これらのオブジェクトにはTimeBetweenReposts
(10分)とTimesToRepost
(20回など)のプロパティがあります。X分ごとに関数を実行
各オブジェクトは、TimeBetweenReposts
分ごとに機能を起動する必要があります。
どうすればいいですか?そうしないと、システムのタスクスケジューラにエントリを作ることができる
private void CheckTime()
{
while (!exitCondition) //So you can cleanly kill the thread before exiting the program.
{
if (nextCheck < DateTime.Now)
{
DoAction();
nextCheck = DateTime.Now + TimeBetweenReposts;
}
Thread.Sleep(1000); //Can be tweaked depending on how close to your time it has to be.
}
}
:
予定の順にすべてのイベントのキューを作成できます。キューから最初のアイテムを選択し、待つか、待つか、アイテムを処理するか、すすぎ、繰り返すかを計算します。あるいは、各オブジェクトは 'NextTime'と' RemainingCount'を維持することができます。最も早い 'NextTime'を見つけて、待ち時間を計算してください。複数のアイテムが同時に支払期限が到来する場合、それは本当に問題ではありません。ちょうど1つを選んで、次のアイテムをチェックするときはゼロ時間で終了します。 (*項目を処理するのに時間がかかる場合を除き、その場合はスレッドを別のスレッドに渡して並列に処理したいかもしれません。) – HABO
スレッドで試しましたが、とても悪い考えです。 CPUで99% – qpBlaze
各スレッドは、何らかの作業を行うまでタイマーまたはスリープ(CPUコストなし)を使用しましたか、ループで時間をチェックし、CPUをできる限り速く消費する「spinwait」ですか? – HABO