views:

120

answers:

4

Hi everyone,

I'm using delphi 2010, is there anyway to know running threads count of the project via delphi function or windows api?

A: 

It's kind of overkill just to get a count, but CreateToolhelp32Snapshot followed by Thread32First and Thread32Next should do the job.

Jerry Coffin
Thanks for reply.
+1  A: 

See the sample code here that enumerates the threads of a process.

dthorpe
Thanks for reply.
+3  A: 

you can use the CreateToolhelp32Snapshot function with the TH32CS_SNAPTHREAD flag

see this code.

  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;

And call in this way, using the GetCurrentProcessId function wich Retrieves the PID (process identifier) of your application.

Var
Num :integer;
begin
 Num:=GetTThreadsCount(GetCurrentProcessId);
end;
RRUZ
Thanks for reply.
A: 

Using WMI you can obtain the process list runninig in System and all information about the process. You must use the Win32_process class.
This class include the method ThreadCount:
···························································
ThreadCount
Number of active threads in a process. An instruction is the basic unit of execution in a processor, and a thread is the object that executes an instruction. Each running process has at least one thread. ···························································

Here (on my web) you can find resources about this theme.

(1) VProcess; Application thah use GLibWMI Library to retrieve all processes running and information about this. ThreadCount is included in this information. The project is free and the source is included (you can see it and evaluate).

alt text

(2) You can download GLibWMI and see the component TProcessInfo that give you all information of process (it's used on VProcess). This library it's free and the source code is avaible. You can see it and evaluate the code. See the demos that test this component.

I hope that this are ussefull for you.

Regards.

Neftalí
Thanks for reply.