簡體   English   中英

在循環中評估DateTime.Now.Millisecond-C#

[英]Evaluating DateTime.Now.Millisecond in a loop - C#

我是編程新手。 我正在嘗試使用System.Timer以毫秒為單位評估時間,以在current timepast time + a number of milliseconds匹配past time + a number of milliseconds (滿足未來條件)時打破while循環。

有時,它成功退出循環,但有時卻作為無限循環運行。 我認為這與毫秒級的時鍾精度有關,但我不確定。 變量的控制台輸出顯示timeFuture是正確的。

我看過Timespan但不確定如何使用它。 非常感謝您的任何反饋。

long end = 500;  //500 milliseconds
long timeStart = DateTime.Now.Millisecond;  //time in milliseconds
long timeFuture = timeStart + end;
long timeNow = 0;

while (true)
{
    timeNow = DateTime.Now.Millisecond;              
    if (timeFuture - timeNow == 0) { break; }             
    Console.WriteLine(timeNow);
}

DateTime.Now.Milisecond不會以毫秒為單位返回時間,而是以DateTime實例表示的時間點的實際毫秒為單位(因此,它將始終在0到999之間)。 此外,由於您在多線程系統上運行,因此您的條件可能永遠不會在評估結果為true的確切時間執行(寫入控制台也會浪費時間)。

因此,您可以考慮更改條件並利用Timespan類:

DateTime timeStart = DateTime.Now;

while (true)
{
  DateTime timeNow = DateTime.Now;
  TimeSpan difference = (timeNow - timeStart);
  if (difference.TotalMilliseconds >= 500) { break; }
  Console.WriteLine(timeNow);
}

毫秒是時間的組成部分,而不是時間跨度。 你想要類似的東西

    DateTime start = DateTime.Now;
    while (true)
    {

        if ((DateTime.Now - start ).TotalMilliseconds>500) // Is a timespan
          { break; }             
        Console.WriteLine(timeNow);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM