//常规
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);
}
本文介绍了两种在C/C++中实现微秒级延时的方法。一种为常规方法,通过循环对比时间差来达到延时效果;另一种为优化后的实现方式,通过直接比较计数与目标延时的乘积来简化条件判断,提高效率。
2834

被折叠的 条评论
为什么被折叠?



