我使用的是delphi 2010,有無論如何通過delphi函數或windows api知道項目的運行線程數?正在運行的線程數
正在運行的線程數
回答
可以使用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;
這是一種矯枉過正的計數,但CreateToolhelp32Snapshot
其次是Thread32First
和Thread32Next
應該做的工作。
參見枚舉進程的線程的示例代碼here。
使用WMI可以獲得System中的進程列表runninig以及有關進程的所有信息。您必須使用Win32_process類。
這個類包括方法THREADCOUNT:
······································· ················
ThreadCount
進程中的活動線程數。指令是處理器中的基本執行單元,線程是執行指令的對象。每個正在運行的進程至少有一個線程。 ································································································· ··········
Here(我的網站上),你可以找到關於這個主題的資源。
(1)VProcess;應用程序使用GLibWMI Library來檢索所有正在運行的進程及其相關信息。 ThreadCount包含在此信息中。該項目是免費的,並且包含源代碼(您可以查看並評估)。
(2)您也可以下載GLibWMI,看看成分TProcessInfo,讓您流程的所有信息(這是對VProcess使用)。這個庫是免費的,源代碼是可用的。你可以看到它並評估代碼。查看測試此組件的演示。
我希望這對你很有用。
問候。
- 1. Python正在運行線程
- 2. 訪問正在運行的線程
- 3. Java線程:正在運行的JVM
- 4. 中斷正在運行的線程
- 5. 正在按順序運行的線程
- 6. 線程運行不正常
- 7. 終止正在運行的線程C++的std ::線程
- 8. 同時Swing GUI的正在運行的線程運行
- 9. ASIHTTP:addOperation當其他線程正在運行
- 10. 正在運行線程狀態?
- 11. 在類和正在運行的線程之間傳遞數據
- 12. Java executorsevice正在關閉,即使它的線程正在運行
- 13. 如何將數據傳遞到正在運行的線程
- 14. Java線程對象vs正在運行線程
- 15. 運行的線程在C#
- 16. 如何在Android進程中獲取正在運行的線程?
- 17. 在Midlet中使用線程:如何偵聽正在運行的線程?
- 18. 在類函數中運行線程
- 19. 在WxPython GUI線程上運行函數
- 20. 停止所有正在運行的線程在活動中運行
- 21. 如何從Java中的線程類中計算正在運行的線程?
- 22. 如何停止當前線程以外的所有正在運行的線程?
- 23. 在gtest中運行線程
- 24. 在線程上運行NSTimer
- 25. Python:線程仍在運行
- 26. 在vb.net中運行線程
- 27. 在JavaFX中運行線程
- 28. 在``C``線程池中運行'POSIX`線程在``C``線程池中運行`函數指針`
- 29. 如何在Silverlight中終止所有正在運行的線程?
- 30. 在java中查殺正在運行的線程?
感謝您的回覆。 – lmengyew 2010-09-28 04:55:58