关于windows下的时间函数

来源:互联网 发布:江苏电信网络提速 编辑:程序博客网 时间:2024/05/18 12:40

    最近开始上班,公司要求实现windows下的ping测试功能,需要得到ping目标主机时的RTT、JITTER等数据信息,于是从网上down了一段源代码,运行后发现跟windows cmd下运行的ping命令有较大的差别,主要是RTT不准确,出现大量的0 (ms),研究代码后发现求RTT调用的是API函数GetTickCount(),msdn中介绍该函数时说返回的数据为毫秒级,但是却有10-16(ms)的误差,即当运行前后的时间差小于16(ms)时,GetTickCount() API将不能返回正确的结果,两次调用返回的结果是一样的!做差运算后RTT可不就是0(ms)了。

    于是在网上搜索相关的帖子,最后终于在一帖子中找到了解决办法;即放弃GetTickCount(),而使用QueryPerformanceFrequence()和QueryPerformanceCount() API,他们分别是返回CPU频率(每秒跳动的次数)和从开机到现在CPU所跳动的次数,这样就能知道执行前后CPU跳动的次数,并除于CPU频率(浮点数除法)再乘上1000就能得到精确的毫秒级时间差,误差为微秒级的!

    windows下同样返回毫秒数的API还有timeGettime、和timeGetSystemtime,他们同样也有精度问题,当需要计算代码执行前后的精确毫秒级时间差时最好不要使用他们!