Тактовая частота
Как при помощи асма(Win32) узнать текущею частоту проца, и сведения о нем?
а почему cpuid не подходит?
воспользуйся функцией
void GetSystemInfo(struct SYS_INFO)
typedef struct _SYSTEM_INFO
{ union
{
DWORD dwOemId;
struct
{
WORD wProcessorArchitecture;
WORD wReserved;
};
};
DWORD dwPageSize;
LPVOID lpMinimumApplicationAddress;
LPVOID lpMaximumApplicationAddress;
DWORD dwActiveProcessorMask;
DWORD dwNumberOfProcessors;
DWORD dwProcessorType;
DWORD dwAllocationGranularity;
WORD wProcessorLevel;
WORD wProcessorRevision;
} SYSTEM_INFO;
задаешь структуру push'аеш ее и вызываешь функцию
все будет ок. только не помню дает ли она частоту... но зато с остальными параметрами - порядок!
инструкции cpuid нет на старых процессорах
не спорю... я подразумевал, что в проце на который пишется Win32-приложение есть эта инструкция.
{
DWORD dwTimerHi, dwTimerLo;
double dRes;
asm
{
DW 0x310F
mov dwTimerLo, EAX
mov dwTimerHi, EDX
}
Sleep (500);
asm
{
DW 0x310F
sub EAX, dwTimerLo
sub EAX, dwTimerHi
mov dwTimerLo, EAX
mov dwTimerHi, EDX
}
dRes = dwTimerLo/(1000.0*500);
return dRes;
}
вот тебе еще... может запоздало... но наткнулся вот, вспомнил о тебе :)
double CPUSpeed(void)
{
DWORD dwTimerHi, dwTimerLo;
double dRes;
asm
{
DW 0x310F
mov dwTimerLo, EAX
mov dwTimerHi, EDX
}
Sleep (500);
asm
{
DW 0x310F
sub EAX, dwTimerLo
sub EAX, dwTimerHi
mov dwTimerLo, EAX
mov dwTimerHi, EDX
}
dRes = dwTimerLo/(1000.0*500);
return dRes;
}
вот тебе еще... может запоздало... но наткнулся вот, вспомнил о тебе :)
DW 0x310F - это команда RDTSC, которая присутствует в моделях процов начиная с Pentium, а с помощью CPUID опредилить частоту проца вообще невозможно, потому что она ее не возвращает. Кстати CPUID появилась в последних версиях i486, таких как i486DX, i486SX, i486SL и т.д.
DW 0x310F - это команда RDTSC, которая присутствует в моделях процов начиная с Pentium, а с помощью CPUID опредилить частоту проца вообще невозможно, потому что она ее не возвращает. Кстати CPUID появилась в последних версиях i486, таких как i486DX, i486SX, i486SL и т.д.
еще раз. (см. выше). все ваши замечания справедливы, и я с ними абсолютно согласен. но! если человек пишет на Win32 API, значит он как минимум использует Windows 95, и процессор не ниже i485DX, а вероятнее всего - Pentium. потому как иначе - он извращенец... :)