繁体   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