Счетчик HotLog

На главнуюЧто я делаю...Программы автора и не только...Творчество
Статьи автораКнига отзывов и предложенийОбо мне, любимомФотоальбом

 
 

Как получить список потоков процесса

Получить дескриптор процесса просто, достаточно вызвать функцию GetCurrentProcessId. Получение списка потоков процесса - уже не такая тривиальная задача, так как не существует функции перебора потоков процесса. И правильно, зачем процессу «знать», какие потоки он породил? Вот потоки содержат информацию о родительском процессе. Это и дает информацию к тому, как мы будем решать задачу:

uses
  TlHelp32, Windows;

procedure TForm1.GetThreadIDsButtonClick(Sender: TObject);
var
  ThreadSnapshotHandle: THandle;
  ThreadFound: Boolean;
  ThreadEntry: tagTHREADENTRY32;
  ProcessID: Cardinal;
begin
  ProcessID := GetCurrentProcessId;
  // Флаг TH32CS_SNAPTHREAD делает снимок потоков.
  ThreadSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
  try
    ThreadEntry.dwSize := SizeOf(ThreadEntry);
    ThreadFound := Thread32First(ThreadSnapshotHandle, ThreadEntry);
    if ThreadFound then
    repeat
      if ThreadEntry.th32OwnerProcessID = ProcessID then
        ThreadIDMemo.Lines.Add(IntToStr(ThreadEntry.th32ThreadID));
    until not Thread32Next(ThreadSnapshotHandle, ThreadEntry);
  finally
    CloseHandle(ThreadSnapshotHandle);
  end;
end;

Здесь, в тестовом примере, дескрипторы потоков процесса выводятся в ThreadIDMemo.

Вы можете скачать исходники демонстрационного проекта (Delphi 7) (2 кБ).

Смотрите также:

 
 

18.09.2007

 
     
Hosted by uCoz