2010-09-28 19 views

risposta

5

è possibile utilizzare la funzione di CreateToolhelp32Snapshot con la bandierina TH32CS_SNAPTHREAD

vedono questo codice.

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; 

E chiamare in questo modo, utilizzando la funzione GetCurrentProcessId wich Recupera il PID (identificatore di processo) della vostra applicazione.

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

Grazie per la risposta. – lmengyew

1

Vedere il codice di esempio here che enumera i thread di un processo.

0

Utilizzando WMI è possibile ottenere l'elenco dei processi runninig nel sistema e tutte le informazioni sul processo. È necessario utilizzare la classe Win32_process.
Questa classe comprende il metodo threadcount:
······································· ·····
ThreadCount
Numero di thread attivi in ​​un processo. Un'istruzione è l'unità di base di esecuzione in un processore e un thread è l'oggetto che esegue un'istruzione. Ogni processo in esecuzione ha almeno un thread. ·················································· ··········

Here (sul mio web) è possibile trovare risorse su questo tema.

(1) VProcess; Applicazione che utilizza GLibWMI Library per recuperare tutti i processi in esecuzione e informazioni su questo. ThreadCount è incluso in queste informazioni. Il progetto è gratuito e la fonte è inclusa (puoi vederla e valutarla).

alt text

(2) È possibile scaricare GLibWMI e vedere la componente TProcessInfo che ti danno tutte le informazioni di processo (è utilizzato su VProcess). Questa libreria è gratuita e il codice sorgente è disponibile. Puoi vederlo e valutare il codice. Guarda le demo che testano questo componente.

Spero che questo sia utile per voi.

Saluti.

Problemi correlati