文档章节

在WINDOWS下进行定时控制的时间误差

dss_liuhl
 dss_liuhl
发布于 2016/06/13 13:15
字数 408
阅读 36
收藏 0

通过调整WaitForMultipleObjects的超时参数进行计时控制,在windows多线程环境下实现定时处理,发现总存在一定的误差。

在WINDOWS xp系统 x86 32位系统下测得只有在250ms的整数倍的情况下可以精确定时,

其他时间间隔都有从0-15ms不等的误差

期望计时间隔 实际得到的计时间隔 误差
50ms 63ms 13ms
60ms 63ms 3ms
70ms 78ms 8ms
80ms 94ms 14ms
90ms 94ms 4ms
100ms 110ms 10ms
110ms 125ms 15ms
120ms 125ms 5ms
130ms 141ms 11ms
140ms 141ms 1ms
150ms 156ms 6ms
160ms 172ms 12ms
160ms 172ms 12ms
170ms 172ms 2ms
180ms 188ms 8ms
190ms 203ms 13ms
200ms 203ms 3ms
210ms 219ms 9ms
220ms 235ms 15ms
230ms 235ms 5ms
240ms 250ms 10ms
250ms 250ms 0ms
500ms 500ms 0ms
750ms 750ms 0ms
1000ms 1000ms 0ms
1250ms 1250ms 0ms

 

测试用例伪代码

 

    for (;;)
    {
        nWaitTime=50;//60,70,80,...
        int nWaitReturn = WaitForMultipleObjects(2,phEvents, FALSE, nWaitTime);
        switch(nWaitReturn)
        {
        case WAIT_TIMEOUT:
            //处理定时事件
            {
                 write_cur_time_to_ui();//

                 proc_timer_event();
            }
            break;

       case SOME_EVENT:

           {

                  proc_some_event();

           }

          break;

       }

  }     

 

原因揣测:应该是WaitForMultipleObjects在等待过程中会有来回的线程切换。在XP x86机器上,线程切换的时间片大小在0-15ms之间进行波动。

WINDOWS系统是一个非实时系统,在多线程环境下用软件实现精确的定时功能很难。WINDOWS的时间片计算机制导致只能有250ms的定时精确度。

综上,对于对时间有严格要求,特别是需要精确到毫秒级的应用,建议采用实时操作系统,分时系统是不可能达到控制精度的。

 

关键字:实时操作系统,分时操作系统,时间精确控制,WINDOWS时间片

 

 

 

 

© 著作权归作者所有

dss_liuhl
粉丝 1
博文 2
码字总数 754
作品 0
深圳
其他
私信 提问
VC++获得微秒级时间的方法与技巧探讨

获得微秒级的时间 收藏 Win 下建议如下方式: http://www.vckbase.com/document/viewdoc/?id=1301 VC中基于 Windows 的精确定时 中国科学院光电技术研究所 游志宇 在工业生产控制系统中,有许...

长平狐
2013/01/06
200
0
Winform开发框架之通用定时服务管理

做项目的时候,或多或少需要和其他外部系统或者接口进行数据交互,有些是单向的获取,有些可能是修改状态后再写回去,不管如何,这个都可以称之为数据同步操作,如人员信息同步、业务数据同步...

walb呀
2017/12/04
0
0
windows mysql 自动备份的几种方法

1、复制date文件夹备份 ============================ 假想环境: MySQL 安装位置:C:MySQL 论坛数据库名称为:bbs 数据库备份目的地:C:dbbak ============================ 新建dbbak.bat...

lisq6151
2016/03/14
0
0
分布式定时任务Elastic-Job框架在SpringBoot工程中的应用实践(二)

文章摘要:在生产环境中部署Elastic-Job集群后,那么如何来运维监控线上跑着的定时任务呢? 如果在生产环境的大规模服务器集群上部署了集成Elastic-Job的业务工程,而没有相应的运维监控工具...

癫狂侠
2018/05/15
0
0
NikolasNull/FastCron

项目简介 使用Java语言开发的定时任务集中调度和管理系统。基于quartz的二次集成,用于替代Linux系统中的crontab。 功能特性 Web界面管理定时任务,支持动态添加、删除、编辑任务。 crontab时...

NikolasNull
2018/09/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CRM、DMP、CDP都是什么?有什么区别?

Markter对CRM系统(Customer Relationship Management System,客户关系管理系统),营销自动化等概念都已经比较熟悉,也许DMP(Data Management Platform,数据管理平台)也多多少少有些了解。...

怡海软件-CRM
5分钟前
1
0
中台是什么,到底要解决什么问题?

故事的开始 这个最早由阿里在2015年提出的“大中台,小前台”战略中延伸出来的概念,最近在国内大热。阿里、腾讯、百度、京东、美团、滴滴等一众互联网巨头,从去年到今年,接连开始组织架构...

喵二狸
16分钟前
2
0
Linux Centos 7 - MySQL 5.7离线安装

内部网络通过离线包的方式进行安装。 一、下载 下载地址:https://dev.mysql.com/downloads/mysql/ 进入页面后,点击右侧链接。 下载对应版本。 通过xftp6等工具上传到服务器上。 二、安装和...

华山猛男
17分钟前
2
0
EventBus 3 全解

EventBus 3 全解 [TOC] 使用 一个基于观察者模式的事件发布/订阅框架. 用于模块间通信和解耦, 使用方便,性能高. 基本使用 1. gradle导入依赖库 implementation 'org.greenrobot:eventbus:3....

马湖村第九后羿
19分钟前
3
0
HTTP 协议

什么是HTTP协议? HTTP是hypertext transport protocol的缩写,即超文本传输协议。 是用于万维网服务器与本地浏览器之间传输超文本的传送协议。可以使浏览器更加高效,使网络传输减少。能够保...

彩色泡泡糖
29分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部