C# 如何获得当前程序运行中的所有线程。并且 暂停 和 恢复运行

C# 如何获得当前程序运行中的所有线程。并且 暂停 和 恢复运行,第1张

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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9718801.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存