如何获取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);

posted @ 2011-05-08 23:16  阿亮同学  阅读(1511)  评论(0编辑  收藏  举报