Wykrywanie użycia rdzeni

0

Witam, potrzebuję w swojej aplikacji wykrywać i wyświetlać na bieżąco użycie poszczególnych rdzeni, powiedzmy co 1s. Chodzi o wyświetlenie wartości w %, czyli nic nadzwyczajnego, problem w tym, że nie wiem jak to odczytać.
Nie zależy mi na jakiejś tam ogromnej dokładności - wystarczy dokładność taka, jaką zapewnia Menedżer Zadań.
Próbowałem to wykonać w D7 za pomocą biblioteki pdh.dll (na podstawie pewnego tutoriala znalezionego w sieci), ale niestety u mnie to nie działa, sprawdziłem i funkcja PdhExpandWildCardPath() zwraca mi "Nie znaleziono obiektu w systemie". Próbowałem zmian header-ów, pdh.dll itp. Innym działa ten sam kod (wg komentarzy na blogu), a u mnie nie.
Są jeszcze jakieś sposoby? A może da się to odczytać poprzez HKEY_PERFORMANCE_DATA ?
Interesuje mnie rozwiązanie w WinAPI. Fajnie by było, gdyby ktoś mógł zarzucić jakimś kodem źródłowym.

0

WMI

i np. wmi code createor to bedzie cos w stylu win32_processor i loadpercentage

0

Sprawdziłem - tamto mi podaje użycie "całego" procesora.

Za to ta klasa:
Win32_PerfFormattedData_PerfOS_Processor
i ta właściwość:
PercentProcessorTime

wydają się podawać użycie rdzeni w %. Tylko jedno mnie dziwi - u mnie w tej chwili działają tylko 3 rdzenie, a WMI zwraca mi:

PercentProcessorTime: 0
PercentProcessorTime: 3
PercentProcessorTime: 3
PercentProcessorTime: 2

tak jakbym miał 4 rdzenie. W sumie mam 4, ale jeden jest wyłączony w BIOS-ie (bo to Athlon II X3 425) więc działają tylko trzy. Nie wiem, którą wartość pomijać, i których rdzeni dotyczą.

0

U mnie np. jak wyłączę komputer to wszystkie cztery rdzenie mają 0% użycia. Może u Ciebie też tak jest?

0

Przecież jak wyłączę komputer to nic nie działa :D
A może Tobie chodzi o to, czy przy wyłączaniu użycie wynosi 0% ?
Nawet jeśli to jaki to ma związek?

0

Czy wg informacji z WMI zawsze jeden rdzeń ma 0% użycia?

0

No właśnie cały bajer polega na tym, że nie...
Często są to wyniki typu:
PercentProcessorTime: 3
PercentProcessorTime: 9
PercentProcessorTime: 3
PercentProcessorTime: 5

0

Widzisz, a z Twojego posta, z którego nic nie wynikało można było wysnuć taki wniosek. ;)

To chyba musisz szukać lepszego sposobu.

0

No :/
Ma ktoś jeszcze jakiś pomysł?

0
  1. PDH - http://msdn.microsoft.com/en-us/library/aa373214(v=VS.85).aspx

Próbowałem to wykonać w D7 za pomocą biblioteki pdh.dll (na podstawie pewnego tutoriala znalezionego w sieci), ale niestety u mnie to nie działa

A jak za pomocą NtQuerySystemInformation() obliczyć procentowe użycie każdego rdzenia? W necie znalazłem jedynie algorytm obliczania użycia "całego" procesora.

0

SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION

//---
znalazlem troche czasu i wpisalem pdh delphi
http://w-shadow.com/blog/2009/04/17/per-core-cpu-usage/

0

Haha

na podstawie pewnego tutoriala znalezionego w sieci

To jest właśnie ten tutorial :)
Dwa ostatnie posty są moje.

0

masz pecha mi dzialaja wszytskie rozwiazania :)

  1. sprawdz czy jest PDH (ale chyba tak), sa jakies wersje bez ?!

  2. sprawdz czy odblokowany jest PDH i mozliwosc pomiaru w systemie (jaki win ?)

  3. Bardziej populapkuj kod, czy daje komunikat missing ? Mozliwe (jak masz) win 7 ze cos sie zmienilo ...

0

XP SP3 32bit PL Zaktualizowany. Niedawno zainstalowany. Brak syfu.

  1. sprawdz czy jest PDH (ale chyba tak), sa jakies wersje bez ?!

Jest, nawet próbowałem z innymi (ściąganymi z neta) wersjami.

  1. sprawdz czy odblokowany jest PDH i mozliwosc pomiaru w systemie (jaki win ?)

Jakiś czas temu sprawdzałem jakimś softem i pokazywało, że jest odblokowana możliwość pomiaru.
Chodzi Ci m.in o komunikat:

The specified object is not found on the system.

? Bo taki komunikat dostaję.

Mógłbyś może podrzucić jakąś binarkę, która działa u Ciebie? Wtedy by się wyjaśniło czy to ja coś źle robię czy Delphi.

0

A wie ktoś jak Menedżer Zadań sprawdza użycie rdzeni? Bo u niego to działa...

1 użytkowników online, w tym zalogowanych: 0, gości: 1