CPU Frequency w C++
Od kilku dni męczę się z napisaniem prostej funkcji, która pobierze aktualną wartość częstotliwości z jaką pracuje procesor pod systemem Windows. Korzystając z Pana Googla dowiedziałem się, że wartość tę można odczytać z rejestru z klucza:
HKEY_LOCAL_MACHINE\\Hardware\\Description\\System\\CentralProcessor\\0
Niestety wartość jaka się tam znajduje jest stała i nie pokazuje częstotliwości z jaką obecnie pracuje CPU. Kolejną rzeczą jaką zrobiłem było wkorzystanie kodu, który znalazłem na stronie codeproject.com.
__int64 GetMachineCycleCount()
{
__int64 cycles;
_asm rdtsc; // won't work on 486 or below - only pentium or above
_asm lea ebx,cycles;
_asm mov [ebx],eax;
_asm mov [ebx+4],edx;
return cycles;
}
Niestety podczas uruchomienia aplikacja się wywala. Próbowałem też skorzystać z MFC. Najpierw męczyłem sie z zainstalowaniem Visual C++ 2005, a potem z całym Windows® Server 2003 SP1 Platform SDK Full, w którym są jakieś automagiczne biblioteki.
Teraz zastanawiam się nad jakąś prostą funkcją, która policzy / oszacuje z jaką obecnie częstotliwością pracuje procesor. Nie mam zielonego pojęcia jak wydobyć tę informację. Na Linuksie jest prościej :)
09 września 2007, 07:52:45
Komentarze
Jakimś Borland C++ Builder. W tym została napisana aplikacja, a teraz ją przerabiam.
Zastanawiam się czy nie skompilować tego kodu co jest na stronie codeproject.com i podlinkować potem do aplikacji z borlanda.
Na Windows też nie jest trudno. O ile użyjesz klas WMI (do których nie mam pojęcia jak dostać się od strony C/C++ – ale na MSDN pewnie to jest).
Ale od strony PowerShella choćby:
(Get-WMIObject Win32_Processor).CurrentClockSpeed
A mnie chodzi właśnie o C/C++ :)
Kamilu, przeć on napisał, że na MSDN znajdziesz. Innymi słowy, masz pomęczyć „sterownik” q ;.
Hej, jak chcesz ostatnio coś takiego pisałem. Kompiluje się na mingw, korzysta z funkcji pobierających wartości klucza z rejestru – sprawdzone na XP (VirtualBox rządzi :)).
Hehehe :)
Zatem będę szukał :)
Myślę też o wykorzystaniu CPUID ;)
A CPUID SDK nie jest płatne?
A ja ponownie odeślę do WMI.
Przykład jest tu:
http://msdn2.microsoft.com/en-us/library/aa390423.aspx
klasa Win32_Processor, pole CurrentClockSpeed.
Wygląda skomplikowanie w czystym C++, ale w kodzie zarządzanym zapewniam, że jest to przyjemniejsze ;-)
Chodzi mi o CPUID
Może tam siedzi ta wartość jakiej szukam :)
Marcin, dzięki :) Wrócę z pracy to zaraz będę czytał :)
Męczyłem się z tym WMI. Pod C++ zadziałało, ale już pod C++ Builder – nie! Załamanie :( Próbowałem skorzystać z prostej wstawki assemblerowej – nie działa. Ten sam kod pod C++ i Delphi działa wyśmienicie.
| Komentować mogą jedynie zalogowani |
Powered by Jogger. Copyright © 2002-2003 Justin Mecham & JabberPL Group
Licencja: Creative Commons Uznanie autorstwa 3.0





…a czym ją kompilowałeś?