用Sleep ,Timer 定時器都不精確,誤差太大。
想要精確計時,在WINDOW下可使用
BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
BOOL QueryPerformanceCounter(LARGE_INTEGER *lpCount);
兩個函式。LARGE_INTEGER 是64位整型。
第一個函式獲取計算機的時鐘頻率(次/秒),第二個函式獲取時鐘計數。呼叫兩次計算差值可求出兩次間間隔的時鐘計數,除以頻率可得時間差。精確到微秒。
給你個函式吧,引數是在延時的時長,單位秒,WINDOWs環境下,C語言實現的。
定時10ms 可用 Delay( 0.01 );
延時1s, Delay(1.0);
void Delay( double t )
{
LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;
double dfMinus, dfFreq, dfTim;
QueryPerformanceFrequency(&litmp);
dfFreq = (double)litmp.QuadPart;// 獲得計數器的時鐘頻率
QueryPerformanceCounter(&litmp);
QPart1 = litmp.QuadPart;// 獲得初始值
do
QPart2 = litmp.QuadPart;//獲得中止值
dfMinus = (double)(QPart2-QPart1);
dfTim = dfMinus / dfFreq;// 獲得對應的時間值,單位為秒
}while(dfTim
用Sleep ,Timer 定時器都不精確,誤差太大。
想要精確計時,在WINDOW下可使用
BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
BOOL QueryPerformanceCounter(LARGE_INTEGER *lpCount);
兩個函式。LARGE_INTEGER 是64位整型。
第一個函式獲取計算機的時鐘頻率(次/秒),第二個函式獲取時鐘計數。呼叫兩次計算差值可求出兩次間間隔的時鐘計數,除以頻率可得時間差。精確到微秒。
給你個函式吧,引數是在延時的時長,單位秒,WINDOWs環境下,C語言實現的。
定時10ms 可用 Delay( 0.01 );
延時1s, Delay(1.0);
void Delay( double t )
{
LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;
double dfMinus, dfFreq, dfTim;
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