quarta-feira, 21 de outubro de 2009

Obter número de Threads de um processo

Olá. Graças à generosidade do Luís Gustavo Fabbro, que mantém um blog muito interessante, a Balaio Tecnológico, posto aqui o código necessário para obter a quantidade de thread de um processo, pelo PID dele:

uses TlHelp32;

{*
Levanta a quantidade de Threads de um processo

@param piPID Identificador do processo em questão
}
function TGInfoWinService.GetThreadCount(piPID: Cardinal): Boolean;
var
hSnapShot   : THandle;
rThreadInfo : TThreadEntry32;
bNext       : Boolean;
iThreadCount: Integer;
begin
Result := False;
iThreadCount := 0;
try
try
hSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);
if (hSnapShot = THandle(-1)) then
raise EGWinService.Create('Erro ao levantar ThreadCount',39248209);
rThreadInfo.dwSize := SizeOf(rThreadInfo);
bNext := Thread32First(hSnapShot,rThreadInfo);
while (bNext) do
begin
if (rThreadInfo.th32OwnerProcessID = piPID) then
Inc(iThreadCount);
bNext := Thread32Next(hSnapShot,rThreadInfo);
end;
Result := True;
except
on E: Exception do
GerarLogTipoException(56565654,E,'Unt_WinService');
end;
finally
CloseHandle(hSnapShot);
if Result then
Self.FThreadCount := iThreadCount
else
Self.FThreadCount := -1;
end;
end;


Mais informações em:

http://balaiotecnologico.blogspot.com/2009/10/obtendo-informacoes-sobre-as-threads-de.html

Um comentário:

Renan Daniel disse...

Uma dúvida:

Usando a API do windows - tlHelp32

obtive o id do meu processo e usando o método threadInfo.th32ThreadID todos os ids das threads desse processo, até aqui tudo ok!!!

Não estou tendo sucesso ao usar SuspendThread ou terminatedThread
Ex: SuspendThread(threadInfo.th32ThreadID) // Nada acontece aqui...

Baixei um programinha chamado ProcessThreadsView.exe, aonde o mesmo lista as informacoes das threads de um processo, possibilitando suspender ou inicar uma das threads ou todas...

Preciso da mesma funcionalidade dentro de um robo na minha aplicação... ALGUÉM poderia dar uma forcinha?

Ah, vi em um dos comentários lá no Balaio Tecnológico (Fonte) aonde o Luís Gustavo Fabbro disse em uma resposta que isso seria possível apenas se ... " Lembre-se apenas de que o usuário executando o programa tem que ter permissão no Windows para acionar essas funções. " ...

Como posso me certificar disso?

Obrigado pela atenção amigooos

Renan

Minha lista de blogs