关于windows下的时间函数

    最近开始上班,公司要求实现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,他们同样也有精度问题,当需要计算代码执行前后的精确毫秒级时间差时最好不要使用他们!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值