6

1秒ごとに定期的に関数を実行したいので、10秒後に10回実行されます。最も簡単なアプローチは、次のようなループを使用することです。

while(true)
{
Thread.Sleep(1000);
function();
}

しかし、このアプローチの主な問題は、定期的な保証が提供されないことです。function() の実行に 0.1 秒かかる場合、関数の実行時間は次のようになります: 0, 1.1 , 2.2, 3.3, 4.4 , ...

私が覚えているように、リアルタイム言語 ADA には関数 sleep-until(#time) があります。現在、C# で代替手段を探しています。

サンプルコードは評価されます。

4

3 に答える 3

7
System.Threading.Timer timer = new System.Threading.Timer(ThreadFunc, null, 0, 1000);

private static void ThreadFunc(object state)
{
    //Do work in here.
}

詳細については、 MSDNを参照してください。

于 2012-10-11T07:53:02.013 に答える
3

Stopwatch時間を測定するために使用できます。代わりに使用しFor-Loopます。

var sw = new System.Diagnostics.Stopwatch();
var timeForOne = TimeSpan.FromSeconds(1);
var count = 10;
for(int i = 0; i < count; i++)
{
    sw.Restart();
    function();
    sw.Stop();
    int rest = (timeForOne - sw.Elapsed).Milliseconds;
    if (rest > 0)
        System.Threading.Thread.Sleep(rest);
}
于 2012-10-11T07:56:33.343 に答える
1

特定の時間間隔の後に何かを呼び出すには、Timer クラスを使用する必要があります。チュートリアルはこちら

于 2012-10-11T07:51:56.507 に答える