MFC 中怎么实现微秒级的延时

转自百度文库:

DelayUs
 1 void DelayUs(int uDelay)
 2 {
 3 
 4     LARGE_INTEGER litmp;
 5     LONGLONG QPart1,QPart2;
 6 
 7     double dfMinus,dfFreq,dfTim;
 8     
 9     /*
10         Pointer to a variable that the function sets, in counts per second, to the current performance-counter frequency. 
11         If the installed hardware does not support a high-resolution performance counter, 
12         the value passed back through this pointer can be zero. 
13 
14     */
15     QueryPerformanceFrequency(&litmp);
16 
17     dfFreq = (double)litmp.QuadPart;
18 
19     /*
20         Pointer to a variable that the function sets, in counts, to the current performance-counter value. 
21     */
22     QueryPerformanceCounter(&litmp);
23 
24     QPart1 = litmp.QuadPart;
25     do
26     {
27            QueryPerformanceCounter(&litmp);
28         QPart2 = litmp.QuadPart;
29         dfMinus = (double)(QPart2-QPart1);
30         dfTim = dfMinus/dfFreq;
31      }while(dfTim<0.000001 * uDelay);
32 }

如果你看懂了上述函数,还可以用它里面的部分代码来测试很多函数的执行时间。

当然,这个函数还是有点隐患,如果在一个延时期间,定时器溢出,那么这个值就有可能不准,需要你小心处理。

如:if (dfMinus < 0)

    break;

这个假设硬件定时器是以增加的方式计数的。

转载于:https://www.cnblogs.com/chenchenluo/archive/2012/10/12/2721018.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值