今天要用到一个微秒级的定时函数,到网上search下,找了几个都不能用,我晕,无奈,还是自己动手比较好,赶紧贴出来。
免得以后要用的时候又不知道那里去找,方便自己也方便大家^_^ 又避免重复发明轮子^_^
/********************************************************************
Created: 2006/09/02
FileName: t.c
Author: Liu Qi
Purpose: 测试微秒级延时
*********************************************************************/
#include <windows.h>
#include <time.h>
#include <stdio.h>
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;
if (!QueryPerformanceFrequency(&Freq))
return;
ulTimeToWait = Freq.QuadPart * ulMicroSeconds / 1000 / 1000;
QueryPerformanceCounter(&timeStart);
timeStop = timeStart;
while (timeStop.QuadPart - timeStart.QuadPart < ulTimeToWait)
{
QueryPerformanceCounter(&timeStop);
}
}
int main(void)
{
struct tm timeStart, timeEnd;
_getsystime(&timeStart);
Delay(1000 * 1000 * 3);//3秒
_getsystime(&timeEnd);
printf("用时:%d秒\n", GetTimeDis(timeStart, timeEnd));
return 0;
}
缺点:延时过程中,CPU不是处于挂起状态。