2011-09-25 15 views
10

Nie jestem świadomy funkcji/funkcji ap32 win32 używanej do sprawdzania aktualnej prędkości lokalnego procesora komputera. Nie chcę korzystać z WMI, ponieważ wydaje się mało prawdopodobne, aby było możliwe na wszystkich komputerach.Funkcja win32 api, aby uzyskać bieżącą prędkość procesora

+0

Cześć Sezam! To pytanie jest trochę niejasne, ale mam nadzieję, że ktoś może pomóc. – Coffee

+0

Jakie wersje okien są kierowane? Dostępność WMI zależy tylko od wersji systemu Windows, myślę, że ... – bdonlan

+0

Nie ma funkcji API, aby to zrobić. Nawet WMI może podawać niedokładne wartości dla zegara procesora. Najlepszym programem, o którym wiem, że uzyskałem prędkość zegara, jest CPUz. – Mysticial

Odpowiedz

4

Możesz (zazwyczaj) uzyskać prędkość procesora za pomocą funkcji QueryPerformanceFrequency. Mówię "zwykle", ponieważ ta funkcja zwraca częstotliwość komponentu timera wydajności systemu, ale praktycznie wszystkie dostępne obecnie procesory działają na tej samej częstotliwości, co komponent timera wydajności.

Ta funkcja jest dostępna od systemu Windows 2000, więc jest duża szansa, że ​​jest obsługiwana na większości dzisiejszych komputerów.

+1

"praktycznie wszystkie dostępne obecnie procesory działają na tej samej częstotliwości, co komponent timera." Dokumentacja [documentation] (https://msdn.microsoft.com/en-ca/library/windows/desktop/dn553408 (v = vs.85) .aspx) twierdzi: "W wielu przypadkach QueryPerformanceFrequency zwraca częstotliwość TSC podzieloną przez 1024, a na Hyper-V częstotliwość licznika wydajności zawsze wynosi 10 MHz, gdy maszyna wirtualna gościa działa pod hiperwizorem, który implementuje interfejs hypervisor wersji 1.0. " Wygląda na to, że przypadek "podzielony przez 1024" dotyczy w szczególności mojego systemu. To nie wydaje się zbyt wiarygodne :( –

2

Proste wyszukiwanie google przyniosło mi this page, który wygląda tak, jakby miał 2 różne sposoby robienia dokładnie tego, czego szukasz.

+0

Obie te metody mogą powodować niedokładne zegary. Powodem jest to, że wszyscy oni (bezpośrednio) używają bezpośrednio instrukcji 'rdtsc' w procesorze, która daje" pseudo "cykle, a nie" rzeczywiste "cykle. – Mysticial

+0

Czy implementacja QueryPerformanceCounter zwykle nie jest oparta na rdtsc? Druga metoda wydaje się raczej zbędna ... –

10

można wywołać funkcję Windows API CallNtPowerInformation z ProcessorInformation argumentów. Zwraca strukturę PROCESSOR_POWER_INFORMATION, która informuje o aktualnej i maksymalnej szybkości procesora dla każdego z procesorów twojego systemu.

Jest to obsługiwane tylko na pulpicie Win32, a nie w Metro lub Windows Phone.

Powiązane problemy