C++ 遍历指定进程的线程列表,在 VS2015 测试通过,已添加中文注释。

本文提供了一个C++示例程序,展示了如何利用Windows API函数枚举当前进程的所有线程,并获取每个线程的基本信息,如线程ID、基本优先级等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:https://msdn.microsoft.com/zh-cn/library/ms686852(v=vs.85).aspx


#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>

//  提前声明:
BOOL ListProcessThreads(DWORD dwOwnerPID);
void printError(TCHAR* msg);

int main(void) {
	ListProcessThreads(GetCurrentProcessId());  // 可使用任务管理器获取某进程的 PID,然后替换 GetCurrentProcessId()
	return 0;
}

BOOL ListProcessThreads(DWORD dwOwnerPID) {
	HANDLE hThreadSnap = INVALID_HANDLE_VALUE;
	THREADENTRY32 te32;

	// 把所有进程拍一个快照
	hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
	if (hThreadSnap == INVALID_HANDLE_VALUE)
		return(FALSE);

	// 在使用 Thread32First 前初始化 THREADENTRY32 的结构大小.
	te32.dwSize = sizeof(THREADENTRY32);

	// 获取第一个线程信息, 如果失败则退出.
	if (!Thread32First(hThreadSnap, &te32)) {
		printError(TEXT("Thread32First"));  // 打印显示错误 [这里可用 GetLastError() 查看具体错误原因]
		CloseHandle(hThreadSnap);     // 必须在使用后清除快照对象!
		return(FALSE);
	}

	// 现在获取系统线程列表, 并显示与指定进程相关的每个线程的信息
	do {
		if (te32.th32OwnerProcessID == dwOwnerPID) {
			_tprintf(TEXT("\n     THREAD ID      = 0x%08X"), te32.th32ThreadID);
			_tprintf(TEXT("\n     base priority  = %d"), te32.tpBasePri);
			_tprintf(TEXT("\n     delta priority = %d"), te32.tpDeltaPri);
		}
	} while (Thread32Next(hThreadSnap, &te32));

	_tprintf(TEXT("\n"));

	//  千万不要忘记清除快照对象!
	CloseHandle(hThreadSnap);
	return(TRUE);
}

void printError(TCHAR* msg) {
	DWORD eNum;
	TCHAR sysMsg[256];
	TCHAR* p;

	eNum = GetLastError();
	FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
		NULL, eNum,
		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // 默认语言
		sysMsg, 256, NULL);  // 行末结尾使用 NULL .
	p = sysMsg;
	while ((*p > 31) || (*p == 9))
		++p;
	do { *p-- = 0; } while ((p >= sysMsg) &&
		((*p == '.') || (*p < 33)));

	// 打印消息
	_tprintf(TEXT("\n  WARNING: %s failed with error %d (%s)"), msg, eNum, sysMsg);
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

至天

看心情啦,最好留着自己喝奶茶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值