windows程序如何实现精准定时
来源:互联网 发布:淘宝君中达常数码店 编辑:程序博客网 时间:2024/05/18 03:26
有朋友问我,“小兵以太网测试仪”这个软件,是如何控制发包频率的。
我想想,干脆写一篇文章来聊聊这个问题吧。
windows下,每当一个程序设定的定时器时间到了,windows会给程序发送一个WM_TIMER消息。
根据著名的windows编程书籍《Windows程序设计》的描述(在第8章),
我们知道,windows的定时器有如下的缺陷:
1. 精度不高
windows98大概是55ms,Windows NT大概是10ms。
2. WM_TIMER消息可能无法及时处理
WM_TIMER消息和其他消息一样,存放在正常的消息队列之中。如果程序处理其他消息,用了太长的时间,就耽误了WM_TIMER消息的处理,从效果上看就相当于定时器来晚了。
3. WM_TIMER消息可能会有遗漏
这样一来,如果一个windows程序在时间方面有苛刻的要求(例如,测试仪之类的软件),怎么办呢。
“小兵以太网测试仪”采用的是如下的笨方法。
这种方法非常简单,但也确实有效。下面是此方法的伪代码。
interval=x; //所需的时间间隔
next_do_work_time=当前时间;
while (!need_stop)
{
do
{
cur_time=当前时间;
} while (!need_stop && cur_time<next_do_work_time);
if (need_stop) break;
DO_WORK();
next_do_work_time+=interval;
}
需要说明的是,这种方法是很消耗CPU的 :)
我想想,干脆写一篇文章来聊聊这个问题吧。
windows下,每当一个程序设定的定时器时间到了,windows会给程序发送一个WM_TIMER消息。
根据著名的windows编程书籍《Windows程序设计》的描述(在第8章),
我们知道,windows的定时器有如下的缺陷:
1. 精度不高
windows98大概是55ms,Windows NT大概是10ms。
2. WM_TIMER消息可能无法及时处理
WM_TIMER消息和其他消息一样,存放在正常的消息队列之中。如果程序处理其他消息,用了太长的时间,就耽误了WM_TIMER消息的处理,从效果上看就相当于定时器来晚了。
3. WM_TIMER消息可能会有遗漏
这样一来,如果一个windows程序在时间方面有苛刻的要求(例如,测试仪之类的软件),怎么办呢。
“小兵以太网测试仪”采用的是如下的笨方法。
这种方法非常简单,但也确实有效。下面是此方法的伪代码。
interval=x; //所需的时间间隔
next_do_work_time=当前时间;
while (!need_stop)
{
do
{
cur_time=当前时间;
} while (!need_stop && cur_time<next_do_work_time);
if (need_stop) break;
DO_WORK();
next_do_work_time+=interval;
}
需要说明的是,这种方法是很消耗CPU的 :)
0 0
- windows程序如何实现精准定时
- AlarmManager实现精准定时任务
- AlarmManager实现精准定时任务
- WINDOWS实现精确定时程序
- 8.4 AlarmManager实现精准定时任务
- Windows中实现定时自动运行程序
- 创建Windows服务程序实现定时操作
- 创建Windows服务程序实现定时操作
- 创建Windows服务程序实现定时操作
- Windows中实现定时自动运行程序
- 如何实现windows XP定时关机?
- 使用python如何实现Windows定时关机?
- 如何实现定时执行php的程序
- servlet 定时操作,定时访问数据库,程序应该如何实现
- 如何使用hadoop实现精准营销
- 如何实现一个精准的Timer
- 如何利用大数据实现精准扶贫?
- 如何在Windows系统中设置Python程序定时运行
- HDU 1003 Max Sum
- 不拖控件ASP.NET——NVelocity(2)
- c语言基础-结构体
- Qt Quick核心编程从入门到精通
- HTML速成教程
- windows程序如何实现精准定时
- 常见编码格式
- Q5.2 Print the binary representation
- 设计模式——策略模式
- Hibernate实体映射配置1(java@注解方式)
- phpstorm主题的使用
- Window端使用SecureCRT登录虚拟机端的终端
- 非计算机专业考试题(C++)
- 在cmd命令行中输入android -h 发现 'xcopy' 不是内部或外部命令的解决办法