您的位置:首页 > 其它

windows下实现微秒级延时

2014-02-19 10:12 211 查看
//常规

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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: