4

15秒の実行後にコードの実行を停止する何かを書き込もうとしています。

ループやその他の種類のループを使用したくないのでWhile、コードで簡単に使用できるように、代わりにIF-ELSE条件を使用したいと思います。

15秒後に実行を停止したいコードの部分は、FORループ自体です。たとえば、以下のコードを考えてみましょう。

for (int i = 1; i < 100000; i++)
{
    Console.WriteLine("This is test no. "+ i+ "\n");
}

15秒間実行した後、このループをどのように停止しますか?

4

3 に答える 3

15

現在の日付と時刻を持つループの前にDateTime変数を割り当ててから、各ループの反復で15秒が経過したかどうかを確認するだけです。

DateTime start = DateTime.Now;
for (int i = 1; i < 100000; i++)
{
    if ((DateTime.Now - start).TotalSeconds >= 15)
        break;
    Console.WriteLine("This is test no. "+ i+ "\n");
}

更新:上記は通常は機能しますが、防弾ではなく、一部のエッジケースでは失敗し(Servyがコメントで指摘したように)、無限のループを引き起こす可能性があります。System.DiagnosticsStopwatch名前空間の一部であるクラスを使用することをお勧めします。

Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 1; i < 100000; i++)
{
    if (watch.Elapsed.TotalMilliseconds >= 500)
        break;
    Console.WriteLine("This is test no. " + i + "\n");
}
watch.Stop();
于 2012-11-04T13:31:37.910 に答える
1

ここでより関連性があるので、以前の投稿からの回答を投稿しています。

私はあなたが時間を測定し、特定の時間が「15秒」と言った後にコードを停止する必要があると思います、StopWatchクラスはあなたを助けることができます。

// Create new stopwatch instance
Stopwatch stopwatch = new Stopwatch();
// start stopwatch
stopwatch.Start();
// Stop the stopwatch
stopwatch.Stop();
// Write result
Console.WriteLine("Time elapsed: {0}",stopwatch.Elapsed);
// you can check for Elapsed property when its greater than 15 seconds 
//then stop the code

Elapsedプロパティは、次のようなTimeSpanインスタンスを返します。

TimeSpan timeGone = stopwatch.Elapsed;

あなたのシナリオに合うように、あなたはこのようなことをすることができます

Stopwatch stopwatch = new Stopwatch();
TimeSpan timeGone;
// Use TimeSpan constructor to specify:
// ... Days, hours, minutes, seconds, milliseconds.
// ... The TimeSpan returned has those values.
TimeSpan RequiredTimeLine = new TimeSpan(0, 0, 0, 15, 0);//set to 15 sec

While ( timeGone.Seconds < RequiredTimeLine.Seconds )
{
    stopwatch.Start();
    Start();
    timeGone = stopwatch.Elapsed;
}
Stop();//your method which will stop listening

いくつかの便利なリンク
MSDNStopWatch

于 2012-11-05T07:00:14.527 に答える
0

以下のコードを使用すると、パフォーマンスが向上します。

System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2));
于 2014-10-07T16:19:30.883 に答える