【发布时间】:2016-07-27 20:16:46
【问题描述】:
我有这个贯穿所有线程的代码。我只想从我自己的进程中获取线程,而不必遍历系统上运行的所有线程。
var
SnapProcHandle: THandle;
NextProc : Boolean;
TThreadEntry : TThreadEntry32;
begin
SnapProcHandle := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
Result := (SnapProcHandle <> INVALID_HANDLE_VALUE);
if Result then
try
TThreadEntry.dwSize := SizeOf(TThreadEntry);
NextProc := Thread32First(SnapProcHandle, TThreadEntry);
while NextProc do
begin
if TThreadEntry.th32OwnerProcessID = PID then
begin
Memo1.Lines.Add('Thread ID '+IntToStr(TThreadEntry.th32ThreadID));
Memo1.Lines.Add('base priority '+inttostr(TThreadEntry.tpBasePri));
Memo1.Lines.Add('delta priority '+inttostr(TThreadEntry.tpBasePri));
end;
NextProc := Thread32Next(SnapProcHandle, TThreadEntry);
end;
finally
CloseHandle(SnapProcHandle);
end;
end;
【问题讨论】:
-
你的英文很好,但你的代码不可读。编辑问题,阅读有关编辑代码格式的帮助。花一些时间做这件事。不要像你之前的很多人一样在 20 多岁之后放弃。
-
也很难理解这个问题以及代码与它的关系。你希望代码做什么。它有什么作用。
-
他想避免循环吗?对我来说似乎很清楚......
-
不管怎样,代码来自RRUZ's answer
标签: windows multithreading delphi