关于C#timer 时间精确度的问题
2015-12-28 15:59
351 查看
转自:http://bbs.csdn.net/topics/390952917
我想用精确的时间计算,需要精确到毫秒级别,代码运行后发下有误差。请教高人怎么实现。
C# code
?
结果如图:
![](http://img.bbs.csdn.net/upload/201412/13/1418462053_67394.png)
要精确到毫秒,可以用StopWatch类,或者用GetTickCount API
前者msdn自己查,后者参考http://www.cnblogs.com/jxsoft/archive/2011/10/17/2215366.html
windows系统定时器精度默认是15.625ms,所以一般的办法不行。想要到10ms或者更高的精度需要通过api调整系统定时器到1ms精度,然后使用Socket.Poll来等待,这是能找到的最精确的方式,但是因为操作系统本身非实时,最后真正要每隔10ms执行任务估计很困难。所以最好先想想需求的必要性,再尝试实现。
windows不是“实时操作系统”,定时器误差在50毫秒都是正常的。如果这么干了,电脑上别的大量应用程序的性能会大大降低。windows上跑的是大量复杂的应用,同一时间有上千个线程进行抢先多任务调度,操作系统也很复杂。它不是只有几个非常简单的进程,它不能过分地修改定时器精度。
我想用精确的时间计算,需要精确到毫秒级别,代码运行后发下有误差。请教高人怎么实现。
C# code
?
![](http://img.bbs.csdn.net/upload/201412/13/1418462053_67394.png)
要精确到毫秒,可以用StopWatch类,或者用GetTickCount API
前者msdn自己查,后者参考http://www.cnblogs.com/jxsoft/archive/2011/10/17/2215366.html
windows系统定时器精度默认是15.625ms,所以一般的办法不行。想要到10ms或者更高的精度需要通过api调整系统定时器到1ms精度,然后使用Socket.Poll来等待,这是能找到的最精确的方式,但是因为操作系统本身非实时,最后真正要每隔10ms执行任务估计很困难。所以最好先想想需求的必要性,再尝试实现。
windows不是“实时操作系统”,定时器误差在50毫秒都是正常的。如果这么干了,电脑上别的大量应用程序的性能会大大降低。windows上跑的是大量复杂的应用,同一时间有上千个线程进行抢先多任务调度,操作系统也很复杂。它不是只有几个非常简单的进程,它不能过分地修改定时器精度。
相关文章推荐
- 【C#笔札】1 string类型
- C# WebBrowser 屏蔽alert,confirm的方法
- C#中timer类的用法总结
- 如何让C#生成的dll动态库文件,在被引用时带有注释备注提示
- csharp: json to csharp
- c#制作launcher
- 《转》用C#通过反射实现动态调用WebService 告别Web引用
- C#中(int)a和Convert.ToInt32(a)区别
- 深入C#中的事件
- C#类型基础----引用类型
- C#实现list的多个和单个删除(基于win8商店应用)
- C# 控制操作火狐浏览器部分功能实现
- C#数据绑定(基于win8应用商店)
- C#中一个问号和两个问号(a ?? b)的作用
- C#并行编程-并发集合
- C#基础精华07(委托事件,委托的使用,匿名方法)
- C#基础精华07(委托事件,委托的使用,匿名方法)
- c#自定义液晶数字控件
- C#字符串小知识
- C#基础——加密