C++关于精准计时

前言

其实只有前言部分。
    最近在做数据抓取的时候遇到这个问题,对文件中特定数据进行提取的时候,要求每25ms更新一次容器内容,主线程则是25ms读取一次容器内的数据。我把子线程设置成守护线程,和主线程同时运行,起初是在主线程、子线程内都设置了一个Sleep(25)函数,但是在主程序中打印出来发现有部分打印的时候会出现容器内一次更新的内容被打印2次,而它的上一次(或者说是下一次也行)的更新内容并没有被打印。思考了一下可能的原因:子线程除了做更新内容外,其余部分操作也会耗时,此时再Sleep(25)则每次更新的时间会超过25ms,就会出错。
    于是去学了毫秒级精度的定时器(Windows API),用了GetTickCount()函数去替代子线程里原本的Sleep(25);
    大致就是在任务函数内定义DWORD t1, t2; 在负责更新的代码块前面,加上t1 = GetTickCount(); 使 t1 等于这个时刻的从操作系统启动到现在经过的毫秒数。
    在更新函数里第一行加上 t2 = GetTickCount(); while((double)(t2 - t1) < 25.0 ) { t2 = GetickCount(); }然后继续往下执行。

    改动之后,主线程里每25ms就能读取到正确的容器内容了。

ps:如果有其他更好的方法或者正确的错误原因,欢迎指正哦!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值