转自百度文库:

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;

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

相关文章:

  • 2021-12-14
  • 2021-12-03
  • 2021-11-13
  • 2021-12-28
  • 2021-12-14
  • 2022-01-18
  • 2021-12-09
猜你喜欢
  • 2021-12-03
  • 2021-12-14
  • 2021-12-04
  • 2021-12-14
  • 2021-12-04
  • 2021-12-19
  • 2022-01-17
相关资源
相似解决方案