Для определения частоты процессора используем ASM вставку. Частота рассчитывается реальная, а не та, что на системнике наклеена.
Строку для хранения частоты мы создаем как указатель char *n, чтобы потом можно было создать по этому адресу строку.
#pragma hdrstop
#pragma argsused
#include <windows.h>
#include <stdio.h>double CPUSpeed(void);
DoubleToChar
int main(int argc, char* argv[])
{
char *n;
CharToOem(“Частота процессора = “,n);
printf(“%s%f Mhz”,n,CPUSpeed());
getchar();
return 0;
}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;
}
*Функция CharToOem преобразует строку в набор символов ОЕМ. Эта функция заменяет функцию AnsiToOem .
BOOL CharToOem (
LPCTSTR lpszSrc , // указатель на преобразуемую строку
LPSTR lpszDst // указатель на буфер для преобразованной строки
);
Параметры
lpszSrc – указывает на завершающуюся нулем преобразуемую строку.
lpszDst – указывает на буфер для преобразованной строки. Если CharToOem используется как ANSI -функция, то можно установить параметр lpszDst на тот же адрес, что и параметр lpszSrc . Это не может быть осуществлено в случае использования CharToOem как Unicode -функции.