我正在使用delphi 2010,无论如何都知道通过delphi函数或windows api运行项目的线程数?
答案 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
后跟Thread32First
和Thread32Next
应该可以胜任。
答案 3 :(得分:0)
使用WMI,您可以获取System中的进程列表runninig以及有关该进程的所有信息。您必须使用Win32_process课程
该类包括ThreadCount方法:
·················································· ·········
的 THREADCOUNT 强>
进程中活动线程的数量。指令是处理器中的基本执行单元,线程是执行指令的对象。每个运行进程至少有一个线程。
·················································· ·········
Here(在我的网站上)您可以找到有关此主题的资源。
(1)VProcess;应用程序使用GLibWMI Library来检索所有正在运行的进程以及有关此问题的信息。 ThreadCount包含在此信息中。该项目是免费的,包括来源(你可以看到并评估)。
(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