C# 中自带的那个 CTimer 看上去是通过消息事件方式的,精度上好像小于10ms 就不行了。
于是找了半天网络,有的方式是引用 kernel32.dll 的库,然后就可以在 C# 中调用 QueryPerformanceCounter。感觉是不那么优雅。
最后居然发现这个 Stopwatch。真的像 一个计时器一样,按一下,开始【Stopwatch.Start()】,再按一下暂停【Stopwatch.Stop()】,再按一下又继续【Stopwatch.Start()】,另一个按钮按一下就重新开始【Stopwatch.Restart()】。
而且的,真的很准的,说是可精确到 1ms。这对我来说是够了,我看了一下 Stopwatch.Frequency,也就是 我这电脑支持的 每秒多少 ticks,是10000000。这个类还提供了一个 IsHighResolution,供你判断你的硬件系统是否支持高精度。我的本本支持。
这里贴一段代码简单说明:
static void test2() { Stopwatch stopWatch = new Stopwatch(); stopWatch.Restart(); Thread.Sleep(1000); // Get the elapsed time as a TimeSpan value. TimeSpan ts = stopWatch.Elapsed; double m1 = stopWatch.ElapsedMilliseconds; //这里显示的时 Start() 或 Restart() 后开始的累计毫秒,Start()后若 Stop()了再 Start(),还是一样继续累计的。Restart() 才会重新开始累计。 double m2 = ts.Milliseconds; //这只是当前毫秒值,不是累计值 double m3 = ts.TotalMilliseconds; //这与 m1 一样 double t = ts.Ticks; // Format and display the TimeSpan value. string elapsedTime = String.Format("m1:{0}, m2:{1}, m3:{2}, ticks:{3}", m1, m2, m3, t); Console.WriteLine("RunTime " + elapsedTime); stopWatch.Restart(); Thread.Sleep(3000); elapsedTime = String.Format("ElapsedMilliseconds: {0}", stopWatch.Elapsed.TotalMilliseconds); Console.WriteLine("RunTime " + elapsedTime); stopWatch.Stop(); }标签:Start,C#,ts,C++,WIN32,stopWatch,Stopwatch,Restart From: https://www.cnblogs.com/pencilstart/p/18622583