Windows下高精度定时器讨论
来源:互联网 发布:ps有没有mac版 编辑:程序博客网 时间:2024/06/05 02:39
只有QueryPerformanceCounter能突破1ms,内部就是一条汇编语句直接读cpu晶振读数,
但容易受到线程排队和消息队列延迟带来的影响,不稳定
QueryPerformanceCounter
缺点是精度不够高,优点是产生的间隔能突破1ms的限制,可以达到更小的间隔,理论上事件产生的频率可以和系统定时器的频率一样
如果为0.001则为1ms产生一次,理论上如果Interval为1,则以最大的频率产生事件。即可以用Windows产生很高频率的事件,但是由于线程的调用是要有时间的,有的时候可能会造成这个线程一直没有得到执行,从而造成有一段时间没有进行计数,这段时间的定时事件就没有产生了,如果定时的频率越高,丢失的可能性就越大。但如果用它来产生高频随时间变化的随机信号还是很有价值的。这在实时仿真中尤其如此。
此外cpu占用也很高,及时相应cpu就一定很忙
private void CountTime(long dwUs)
{
if (dwUs < 0) return;
long ctr1 = 0, ctr2 = 0;
if (freq == 0) QueryPerformanceFrequency(ref freq);
if (QueryPerformanceCounter(ref ctr1) != 0) // Begin timing.
{
do
{
QueryPerformanceCounter(ref ctr2); // Finish timing.
} while (((ctr2 - ctr1) * 1.0 * 1000000 / freq) < dwUs);
}
else
{
Thread.Sleep(Convert.ToInt32(dwUs / 1000));
}
}
[DllImport("kernel32.dll")]
extern static short QueryPerformanceFrequency(ref long x);
[DllImport("kernel32.dll")]
extern static short QueryPerformanceCounter(ref long x);
Windows下要实现稳定的1ms定时是不可能的,Windows本来就不是实时操作系统,当初的设计就是不用来高精度定时,CreateWaitableTimer,SetWaitableTimer 可以精确到100纳秒,但是波动性仍然很大.另外多媒体定时器也可以实现1ms的定时,不过最多只能开16个定时器,而且实际时间波动也不小
- Windows下高精度定时器讨论
- 高精度定时器(Windows)
- Windows下的高精度定时器实现及精确时刻获取
- Windows下的高精度定时器实现及精确时刻获取
- Windows下的高精度定时器实现及精确时刻获取
- Windows下的高精度定时器实现及精确时刻获取
- Windows下的高精度定时器实现及精确时刻获取
- Windows下的高精度定时器实现及精确时刻获取
- 针对windows系统的高精度定时器
- VC++或QT下 高精度 多媒体定时器
- VC++ 下多媒体高精度定时器timeSetEvent
- Linux下的hrtimer高精度定时器
- 关于Linux下的高精度定时器
- linux下jiffies定时器和hrtimer高精度定时器
- linux下jiffies定时器和hrtimer高精度定时器
- linux下jiffies定时器和hrtimer高精度定时器
- 高精度定时器
- 高精度定时器
- 如何在 Git 里撤销(几乎)任何操作
- 知识、数据与推理
- 人工智能与艺术的未来
- nfs
- 三张图读懂机器学习:基本概念、五大流派与九种常见算法
- Windows下高精度定时器讨论
- 【金融财经】金融市场一周简报(2017-12-08)
- JAVA代码注释模板
- 初识Python-列表的使用
- vim笔记
- GCC选项_-Wl,-soname
- Java基础知识小清单(一)
- Zuul (SpringCloud学习笔记一) 转
- 如何在新建的eclips的工作空间部署开发环境