The following example obtains a list of running threads for the specified process. First, the RefreshThreadList function takes a snapshot of the currently executing threads in the system using the CreateToolhelp32Snapshot function, then it walks through the list recorded in the snapshot, using the Thread32First and Thread32Next functions. The parameter for RefreshThreadList is the identifier of the process whose threads will be listed.
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>
BOOL RefreshThreadList (DWORD dwOwnerPID)
{
HANDLE hThreadSnap = NULL;
BOOL bRet = FALSE;
THREADENTRY32 te32 = {0};
// Take a snapshot of all threads currently in the system.
hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if (hThreadSnap == INVALID_HANDLE_VALUE)
return (FALSE);
// Fill in the size of the structure before using it.
te32.dwSize = sizeof(THREADENTRY32);
// Walk the thread snapshot to find all threads of the process.
// If the thread belongs to the process, add its information
// to the display list.
if (Thread32First(hThreadSnap, &te32))
{
do
{
if (te32.th32OwnerProcessID == dwOwnerPID)
{
printf( "/nTID/t/t%d/n", te32.th32ThreadID);
printf( "Owner PID/t%d/n", te32.th32OwnerProcessID);
printf( "Delta Priority/t%d/n", te32.tpDeltaPri);
printf( "Base Priority/t%d/n", te32.tpBasePri);
}
}
while (Thread32Next(hThreadSnap, &te32));
bRet = TRUE;
}
else
bRet = FALSE; // could not walk the list of threads
// Do not forget to clean up the snapshot object.
CloseHandle (hThreadSnap);
return (bRet);
}
枚举特定进程的所有线程列表
最新推荐文章于 2020-09-01 14:40:08 发布
博客给出获取指定进程运行线程列表的示例。先通过CreateToolhelp32Snapshot函数获取系统当前执行线程快照,再用Thread32First和Thread32Next函数遍历快照记录。还给出了RefreshThreadList函数的代码实现,包含线程信息打印和资源清理。
948

被折叠的 条评论
为什么被折叠?



