delphi
function GetThreadsList(dwProcessId: DWORD; out hList: Tlist): Boolean;
type
PThreadsInfo = ^TThreadsInfo;
TThreadsInfo = record
dwThreadID : dword;
dwUsage : dword;
Priority : dword;
end;
var
hSnapShot: THandle;
ThreadsInfo : PThreadsInfo;
ThreadEntry32: TThreadEntry32;
begin
hList := TListCreate;
hListClear;
hSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
ThreadEntry32dwSize := Sizeof(TThreadEntry32);
Result := Thread32First(hSnapShot, ThreadEntry32);
while Result do begin
if dwProcessId = ThreadEntry32th32OwnerProcessID then
try
New(ThreadsInfo);
with ThreadsInfo^, ThreadEntry32 do begin
dwThreadID := th32ThreadID;
dwUsage := cntUsage;
Priority := tpBasePri;
end;
hListAdd(ThreadsInfo);
finally
end;
Result := Thread32Next(hSnapShot, ThreadEntry32);
end;
end;
c++
void FillThreadList(CMyListCtrl &lstCtrl)
{
/if (m_dwProcessID <= 0)
{
return;
}/
//清空列表
lstCtrlDeleteAllItems();
//创建进程映像快照
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if (hSnap == NULL)
{
AfxMessageBox("创建线程映像快照失败!");
return;
}
THREADENTRY32 th = {0};
thdwSize = sizeof(THREADENTRY32);
//检索系统中第一个进程快照信息
if (!Thread32First(hSnap, &th))
{
AfxMessageBox("查找进程线程失败!");
}
else
{
CString txtBasePri, txtThreadID, txtHThread, txtCntUsage;
do
{
if (thth32OwnerProcessID == m_dwProcessID)
{
txtThreadIDFormat("%d", thth32ThreadID);
txtBasePriFormat("%d", thtpBasePri);
txtCntUsageFormat("%d", thcntUsage);
txtHThreadFormat("%08X", thth32OwnerProcessID);
lstCtrlAddItem(txtThreadID, txtHThread, txtBasePri, txtCntUsage);
ZeroMemory(&th, 0);
thdwSize = sizeof(THREADENTRY32);
}
}
while (Thread32Next(hSnap, &th));//检索系统中的下一个进程快照信息
lstCtrlAutoSize();
txtBasePriFormat("ProcessThreadManager - [线程数:%d]", lstCtrlGetItemCount());
SetWindowText(txtBasePri);
}
CloseHandle(hSnap);
}
C# 改怎么写总该明白了吧,
获得线程ID 下步该干什么?
function OpenThread( dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwThreadId: DWORD): THandle; stdcall;
打开线程,获取句柄,或者直接暂停 启动
百度贴吧档次太低了 你想找答案换个地方吧。。。回答问题的人基本都是文不对题,人家问怎么获取程序中的线程,你管他那么多,管他干什么呢~
c# ThreadPool 判断子线程全部执行完毕的四种方法 1、先来看看这个 多线程编程 多线程用于数据采集时,速度明显很快,下面是基本方法,把那个auto写成采集数据方法即可。 using System; using SystemCollectionsGeneric; using SystemText; u
GetThreadId 根据线程句柄得到线程ID。
GetWindowThreadProcessId ,根据窗口句柄得到此窗口所在线程的ID(也同时得到进程的ID)
OpenThread,能根据ID得到线程的句柄。
其实你问的应该是为什么直接写Thread。
先看下api上如此写:
currentThread
public static Thread currentThread()
返回对当前正在执行的线程对象的引用。
可见这时个静态方法,你这么理解更好点:你在哪个线程调用的我(currentThread),我就给你返回哪个线程。跟父子其实没有关系的,你在父中调用我,我就返回你说的父线程,你在子调用我就返回子线程,你在main主线程调用,我就返回主线程。也就是说你cpu正在运行哪个线程。如图:
以上就是关于C# 如何获得当前程序运行中的所有线程。并且 暂停 和 恢复运行全部的内容,包括:C# 如何获得当前程序运行中的所有线程。并且 暂停 和 恢复运行、怎样获取ThreadPool中的总线程数,包括正在工作的和空闲的、如何获取一个进程中所有线程ID等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)