可以Environment.TickCount用来计算时间跨度吗?int start = Environment.TickCount;// Do stuffint duration = Environment.TickCount - start;Console.WriteLine("That took " + duration " ms");因为它TickCount是有符号的,并且将在25天后翻转(要花费50天才能全部击中32位,但是如果您想对数学有任何了解,就必须报废有符号的位),这似乎太冒险了,无法使用。我正在使用DateTime.Now。这是最好的方法吗?DateTime start = DateTime.Now;// Do stuffTimeSpan duration = DateTime.Now - start;Console.WriteLine("That took " + duration.TotalMilliseconds + " ms");
3 回答
鸿蒙传说
TA贡献1865条经验 获得超7个赞
您为什么担心结转?只要您测量的持续时间在24.9天以内,并且您可以计算相对持续时间,就可以了。只要您只关心自己那部分运行时间(而不是直接在起点和终点进行小于或大于比较),系统就可以运行多长时间了。即这个:
int before_rollover = Int32.MaxValue - 5;
int after_rollover = Int32.MinValue + 7;
int duration = after_rollover - before_rollover;
Console.WriteLine("before_rollover: " + before_rollover.ToString());
Console.WriteLine("after_rollover: " + after_rollover.ToString());
Console.WriteLine("duration: " + duration.ToString());
正确打印:
before_rollover: 2147483642
after_rollover: -2147483641
duration: 13
您不必担心标志位。C#和C一样,可以让CPU处理。
在嵌入式系统中,我经常遇到这种情况。例如,我永远不会直接比较beforerollover <afterrollover。我将始终执行减法来找到将过渡考虑在内的持续时间,然后根据该持续时间进行任何其他计算。
- 3 回答
- 0 关注
- 1354 浏览
添加回答
举报
0/150
提交
取消