利用计算机中的8253,8254可编程时间间隔定时器芯片实现的。在计算机内部有三个独立的16位计数器。计数器可以以二进制或二—十进制(BDC)计数。计数器每秒产生1193180次脉冲,每次脉冲使计数器的数字减一,产生频率是可变的,用QueryPerformanceFrequency可以得到,一般情况下都是 1193180。QueryPerformanceCounter可以得到当前的计数器值。所以只要你的计算机够快, 理论上精度可以达到1/1193180秒。
void QuerySleep(float MilliSecond)
{
_LARGE_INTEGER litmp;
__int64 QPart1,QPart2;
double dfMinus,dfTim,dfFreq;
QueryPerformanceFrequency(&litmp); // »ñµÃ¼ÆÊýÆ÷µÄʱÖÓƵÂÊ
dfFreq=(double)litmp.QuadPart;
QueryPerformanceCounter(&litmp);
QPart1=litmp.QuadPart;
do
{
QueryPerformanceCounter(&litmp); // »ñµÃÖÕÖ¹Öµ
QPart2=litmp.QuadPart;
dfMinus=(double)(QPart2-QPart1);
dfTim=dfMinus/dfFreq; // ʱ¼ä²î
}while(dfTim<(MilliSecond/1000));
}