如何获取cpu频率
为了调试游戏,有时需要参考玩家的系统信息,试了下,发现用高精度计时器可以获得较为准确的结果。
(原代码作者不详,有改动)
//精确延时获得CPU频率
#include <windows.h>
int CPU_Frequency(void) //MHz
{
LARGE_INTEGER CurrTicks, TicksCount;
__int64 iStartCounter, iStopCounter;
DWORD dwOldProcessP = GetPriorityClass(GetCurrentProcess()); //纪录和提高优先级
DWORD dwOldThreadP = GetThreadPriority(GetCurrentThread());
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
QueryPerformanceFrequency(&TicksCount);
QueryPerformanceCounter(&CurrTicks);
TicksCount.QuadPart /= 16;
TicksCount.QuadPart += CurrTicks.QuadPart;
__asm
{
rdtsc
mov DWORD PTR iStartCounter, EAX
mov DWORD PTR (iStartCounter+4), EDX
}
while(CurrTicks.QuadPart<TicksCount.QuadPart)
QueryPerformanceCounter(&CurrTicks);
__asm
{
rdtsc
mov DWORD PTR iStopCounter, EAX
mov DWORD PTR (iStopCounter + 4), EDX
}
SetThreadPriority(GetCurrentThread(), dwOldThreadP);
SetPriorityClass(GetCurrentProcess(), dwOldProcessP);
return (int)((iStopCounter-iStartCounter)/62500);
}
======================
另:从SYSTEM_INFO中便能获得核数、类型等CPU信息
GetSystemInfo(&siSysInfo);
|