標籤:64位 利用 .net return count 硬體 ptime cpu href
LONGLONG GetFrequency(DWORD sleepTime) //擷取CPU主頻{ DWORD low1 = 0, high1 = 0, low2 = 0, high2 = 0; LARGE_INTEGER fq, st, ed; /*在定時前應該先調用QueryPerformanceFrequency()函數獲得機器內部計時器的時鐘頻率。接著在 需要嚴格計時的事件發生前和發生之後分別調用QueryPerformanceCounter(),利用兩次獲得的技術 之差和時鐘的頻率,就可以計算出時間經曆的精確時間。*/ ::QueryPerformanceFrequency(&fq); //精確計時(返回硬體支援的高精度計數器的頻率) ::QueryPerformanceCounter(&st); //獲得起始時間 __asm { //獲得當前CPU的時間數 rdtsc mov low1, eax mov high1, edx } ::Sleep(sleepTime); //將線程掛起片刻 ::QueryPerformanceCounter(&ed); //獲得結束時間 __asm { rdtsc //讀取CPU的時間戳記計數器 mov low2, eax mov high2, edx } //將CPU得時間周期數轉化成64位整數 LONGLONG begin = (LONGLONG)high1 << 32 | low1; LONGLONG end = (LONGLONG)high2 << 32 | low2; //將兩次獲得的CPU時間周期數除以間隔時間,即得到CPU的頻率 //由於windows的Sleep函數有大約15毫秒的誤差,故以windows的精確計時為準 return (end - begin)*fq.QuadPart / (ed.QuadPart - st.QuadPart);}
轉自:http://blog.csdn.net/kofandlizi/article/details/6253801
C++擷取CPU頻率(轉)