在进行多线程编程时,经常需要进行一些线程的延时,而对于Sleep 是不准确的,所以需要获取震片时间钟进行延时。代码如下:
ULONG GetTimeDis(struct tm first, struct tm second) {
return abs((first.tm_hour * 3600 + first.tm_min * 60 + first.tm_sec)
- (second.tm_hour * 3600 + second.tm_min * 60 + second.tm_sec));
}
//延时 微妙级别
void Delay(ULONG ulMicroSeconds)
{
LARGE_INTEGER timeStop;
LARGE_INTEGER timeStart;
LARGE_INTEGER Freq;
ULONG ulTimeToWait;
__try
{
if (!QueryPerformanceFrequency( &Freq ))
return;
ulTimeToWait = Freq.QuadPart * ulMicroSeconds / 1000 / 1000;
QueryPerformanceCounter ( &timeStart );
timeStop = timeStart;
while( timeStop.QuadPart - timeStart.QuadPart < ulTimeToWait )
{
QueryPerformanceCounter( &timeStop );
}
}
__except( EXCEPTION_EXECUTE_HANDLER )
{
AfxMessageBox( "延迟错误") ;
}
}
本文介绍了一种在多线程编程中实现精确延时的方法。利用获取系统时钟来替代Sleep函数,通过计算前后两个时间点的差值实现微秒级别的延时。文中提供了具体的C/C++实现代码。
132

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



