Problem z procedurą listy procesów

0

Cześć. Mam problem z tą procedurą, bo <ort>niewiem </ort>dlaczego <ort>niedziała </ort>w niej pokazywanie zużycia CPU przez dany proces :/ Co może byś źle ?

var
H, H2: THandle;
P: tagPROCESSENTRY32;
i: integer;
Item: TListItem;
begin
i := ListView1.ItemIndex;
ListView1.Items.Clear;
H := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
P.dwSize := SizeOf(P);
if Process32First(H, P) then
repeat
H2 := OpenProcess(PROCESS_QUERY_INFORMATION, False, P.th32ProcessID);
Item := ListView1.Items.Add;
Item.Caption := P.szExeFile;
Item.SubItems.Add(IntToStr(P.cntUsage));
Item.SubItems.Add(IntToStr(P.th32ProcessID));
CloseHandle(H2);
until not Process32Next(H, P);
CloseHandle(H);
ListView1.ItemIndex := i;
end;

0

przejedź po kodzie debugerem, to się dowiesz

poza tym moze byś powiedział, w czym problem, bo nie jesteśmy dobrymi wróżkami. co najwyżej złymi.

jak na mój gust, to przekleiłeś kawałek kodu, co do którego nie masz pojęcia jak działa.
po pierwsze: niepotrzebnie otwierasz proces, bo i tak nigdzie nie używasz otworzonego uchwytu
po drugie - a gdzie ty w kodzie masz pobieranie jakiegoś czasu? bo nie widzę.
po trzecie - wrzucasz gdzieś do zmiennej P id procesu? bo też nie widzę.
po czwarte - nawet jeśli otworzysz prawidłowo proces (czego nie robisz), to i tak brakuje ci pobierania czasu zużytego przez dane zadanie.
po piąte i najważniejsze - ŻADNA FUNKCJA API WINDOWSA NIE OBLICZA ZUŻYCIA MOCY PROCESORA PRZEZ KONKRETNY WĄTEK/PROCES W PROCENTACH!!! musisz mierzyć przyrosty czasu przyznanego procesom przez procesor i na ich podstawie liczyć obciążenie w %.

bo widzisz - nawet do ctrl+c, ctrl+v trzeba mieć jakieś podstawowe umiejętności.

0

Ale <ort>niechodzi </ort>mi o to, że się ort!, tylko po prostu w SubItemie tak, gdzie powinno widnieć zużycie CPU przez dany proces cały czas jest 0 :(

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