[英]Evaluating DateTime.Now.Millisecond in a loop - C#
我是编程新手。 我正在尝试使用System.Timer
以毫秒为单位评估时间,以在current time
与past 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.