Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.04;
Скачать: CL | DM;

Вниз

Сравнение компиляторов - часть 2   Найти похожие ветки 

 
VuDZ ©   (2002-02-21 17:41) [85]

вот, забыл сразу сказать: есть код, достаточно старый, который вывод нужную инфу о проце в файл. Я думаю, что портировать его под Делфи или Java будет не сложно, хотя с Java могут быть проблемы

class CCPUInfo
{
public:
CCPUInfo();
~CCPUInfo();
bool WriteTo(LPSTR szFName);
bool m_bReady;
private:
char *m_cCPUName;
DWORD m_dwCPUClock,
m_dwMemtotal,
m_dwAval;
__int64 GetCpuTick();
int GetCpuFrequency();
};

CCPUInfo::CCPUInfo()
{
m_cCPUName = new char[13];
m_bReady = false;
if (!m_cCPUName)
return;
m_bReady = true;
ZeroMemory(m_cCPUName, 13);

void * v = m_cCPUName;
_asm
{
xor eax, eax
cpuid
mov esi, v
mov [esi], ebx
mov [esi + 4], edx
mov [esi + 8], ecx
}

m_dwCPUClock = GetCpuFrequency();

MEMORYSTATUS memstat;
GlobalMemoryStatus(&memstat);
m_dwMemtotal = memstat.dwTotalPhys;
m_dwAval = memstat.dwAvailPhys;

}

CCPUInfo::~CCPUInfo()
{
if (m_bReady)
delete m_cCPUName;
}

__declspec(naked)
__int64 CCPUInfo::GetCpuTick()
{ __asm {
rdtsc
ret
} }

int CCPUInfo::GetCpuFrequency()
{
__int64 Frequency,
TimerCount1,
TimerCount2,
CpuCount1,
CpuCount2; if (!QueryPerformanceFrequency ((LARGE_INTEGER*) &Frequency)) return 0;

QueryPerformanceCounter ((LARGE_INTEGER*) &TimerCount1);

CpuCount1 = GetCpuTick ();
Sleep (500);
CpuCount2 = GetCpuTick ();
QueryPerformanceCounter ((LARGE_INTEGER*) &TimerCount2);
if (TimerCount1 == TimerCount2) return 0;
return (int) ((double) ((CpuCount2 - CpuCount1) * Frequency) /
(double) (TimerCount2 - TimerCount1));
}

bool CCPUInfo::WriteTo(LPSTR szFName)
{
if (szFName == NULL)
return false;

ofstream ofs((const char*)szFName);
if (ofs.is_open() == 0)
return false;

ofs << "CPU Vendor: " << m_cCPUName << endl;
ofs << "CPU Frequency: " << m_dwCPUClock / 1000000 << "\tin MHz" << endl;
ofs << "Total physical memory: " << (m_dwMemtotal / 1048576) << "\tin Mb"<< endl;
ofs << "Physical memory available: " << (m_dwAval / 1048576) << "\tin Mb" << endl;

ofs.flush();
ofs.close();

return true;
}


использование:
CCPUInfo ci;
ci.WriteTo("C:\\info.txt");

есть ещё вариант, который выводит инфу о проце - Атлон, пень и пр., о он очень большой. Можно добавить фишки на фкус, типа, имя тестер, дата, время...

C.U.



Страницы: 1 2 3 вся ветка

Текущий архив: 2002.04.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
1-9435
stexen
2002-03-24 15:05
2002.04.04
ИНФОРМАЦИЯ О exe-файле


7-9653
Gunya
2002-01-03 20:32
2002.04.04
Как послать на LPT сигнал определенной длительности?


1-9436
DikobraZ
2002-03-25 09:02
2002.04.04
RichEdit


1-9430
Aleksandr
2002-03-22 13:08
2002.04.04
Как обрезать файловый поток?


1-9483
КОляныч_
2002-03-25 19:25
2002.04.04
HELP!!! Работа с текстом! Поиск множества совпадений!