运行线程计数

时间:2010-09-28 04:33:56

标签: multithreading delphi

我正在使用delphi 2010,无论如何都知道通过delphi函数或windows api运行项目的线程数?

5 个答案:

答案 0 :(得分:6)

您可以将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;

答案 1 :(得分:1)

请参阅枚举进程线程的示例代码here

答案 2 :(得分:0)

获得点数只是一种过度杀伤,但CreateToolhelp32Snapshot后跟Thread32FirstThread32Next应该可以胜任。

答案 3 :(得分:0)

使用WMI,您可以获取System中的进程列表runninig以及有关该进程的所有信息。您必须使用Win32_process课程 该类包括ThreadCount方法:
·················································· ·········
THREADCOUNT
进程中活动线程的数量。指令是处理器中的基本执行单元,线程是执行指令的对象。每个运行进程至少有一个线程。 ·················································· ·········

Here(在我的网站上)您可以找到有关此主题的资源。

(1)VProcess;应用程序使用GLibWMI Library来检索所有正在运行的进程以及有关此问题的信息。 ThreadCount包含在此信息中。该项目是免费的,包括来源(你可以看到并评估)。

alt text

(2)您可以下载GLibWMI并查看组件 TProcessInfo ,它可以为您提供进程的所有信息(它在VProcess上使用)。这个库是免费的,源代码是可用的。您可以看到它并评估代码。请参阅测试此组件的演示。

我希望这对你来说是件好事。

问候。

答案 4 :(得分:0)

使用TH32CS_SNAPPROCESS标志似乎更有效(根据我的测试,速度提高了5倍)。

Row: 0  Col: 0
Row: 2  Col: 1
Row: 3  Col: 3
Row: 5  Col: 1
Row: 9  Col: 8