2010-09-28 62 views

回答

5

可以使用CreateToolhelp32Snapshot功能與TH32CS_SNAPTHREAD標誌

看到這個代碼。

uses 
    PsAPI, 
    TlHelp32, 
    Windows, 
    SysUtils; 

    function GetTThreadsCount(PID:Cardinal): Integer; 
    var 
     SnapProcHandle: THandle; 
     NextProc  : Boolean; 
     TThreadEntry : TThreadEntry32; 
     Proceed  : Boolean; 
    begin 
     Result:=0; 
     SnapProcHandle := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); //Takes a snapshot of the all threads 
     Proceed := (SnapProcHandle <> INVALID_HANDLE_VALUE); 
     if Proceed then 
      try 
      TThreadEntry.dwSize := SizeOf(TThreadEntry); 
      NextProc := Thread32First(SnapProcHandle, TThreadEntry);//get the first Thread 
      while NextProc do 
      begin 
       if TThreadEntry.th32OwnerProcessID = PID then //Check the owner Pid against the PID requested 
       Inc(Result); 
       NextProc := Thread32Next(SnapProcHandle, TThreadEntry);//get the Next Thread 
      end; 
      finally 
      CloseHandle(SnapProcHandle);//Close the Handle 
      end; 
    end; 

並以這種方式調用,使用GetCurrentProcessId功能至極檢索應用程序的PID(進程標識符)。

Var 
Num :integer; 
begin 
Num:=GetTThreadsCount(GetCurrentProcessId); 
end; 
+0

感謝您的回覆。 – lmengyew 2010-09-28 04:55:58

1

參見枚舉進程的線程的示例代碼here

0

使用WMI可以獲得System中的進程列表runninig以及有關進程的所有信息。您必須使用Win32_process類。
這個類包括方法THREADCOUNT:
······································· ················
ThreadCount
進程中的活動線程數。指令是處理器中的基本執行單元,線程是執行指令的對象。每個正在運行的進程至少有一個線程。 ································································································· ··········

Here(我的網站上),你可以找到關於這個主題的資源。

(1)VProcess;應用程序使用GLibWMI Library來檢索所有正在運行的進程及其相關信息。 ThreadCount包含在此信息中。該項目是免費的,並且包含源代碼(您可以查看並評估)。

alt text

(2)您也可以下載GLibWMI,看看成分TProcessInfo,讓您流程的所有信息(這是對VProcess使用)。這個庫是免費的,源代碼是可用的。你可以看到它並評估代碼。查看測試此組件的演示。

我希望這對你很有用。

問候。