windows下实现微秒级延时

来源:互联网 发布:c语言学生成绩管理删除 编辑:程序博客网 时间:2024/06/07 02:01

//常规

void sleep_micro_seconds(ULONG ulMicroSeconds)
{
 LARGE_INTEGER varFrequency = {0}, varCounter_Start = {0}, varCounter_End = {0};
 double dFrequency = 0;
 LONGLONG llCount = 0;

 ::QueryPerformanceFrequency(&varFrequency);
 dFrequency = varFrequency.QuadPart/1.0;

 ::QueryPerformanceCounter(&varCounter_Start);

 while(true)
 {
  ::QueryPerformanceCounter(&varCounter_End);
  llCount = varCounter_End.QuadPart - varCounter_Start.QuadPart;
  
  if((llCount/dFrequency) > (ulMicroSeconds/1000000.0) )
  {
   break;
  }
 }
}

 

//优化

void sleep_micro_seconds(ULONG ulMicroSeconds)
{
 LARGE_INTEGER varFrequency = {0}, varCounter_Start = {0}, varCounter_End = {0};
 LONGLONG llCount = 0;

 ::QueryPerformanceFrequency(&varFrequency);
 ::QueryPerformanceCounter(&varCounter_Start);

 while(true)
 {
  ::QueryPerformanceCounter(&varCounter_End);

  llCount = varCounter_End.QuadPart - varCounter_Start.QuadPart;

  if(1000000*llCount > ulMicroSeconds*varFrequency.QuadPart)
  {
   break;
  }
 }
}

 

 

int main(int argc, char* argv[])
{

 sleep_micro_seconds(40);

}

0 0
原创粉丝点击