-1
我在Windows平台上编写了一个基于boost :: asio的服务器。我想定期记录我的应用程序的当前活动线程数。windows api:如何在当前进程中找到活动线程数?
我可以在Threads列的windows任务管理器进程视图中看到我的应用程序的线程数。有没有一个窗口API来获得相同的?
经过一段时间徒劳的谷歌搜索后,我认为最好从SO寻求建议。
我在Windows平台上编写了一个基于boost :: asio的服务器。我想定期记录我的应用程序的当前活动线程数。windows api:如何在当前进程中找到活动线程数?
我可以在Threads列的windows任务管理器进程视图中看到我的应用程序的线程数。有没有一个窗口API来获得相同的?
经过一段时间徒劳的谷歌搜索后,我认为最好从SO寻求建议。
Raymond Chen has the answer,基于Tool Help Library。
为了完整起见,他的样本代码如下:
#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
int __cdecl main(int argc, char **argv)
{
HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if (h != INVALID_HANDLE_VALUE) {
THREADENTRY32 te;
te.dwSize = sizeof(te);
if (Thread32First(h, &te)) {
do {
if (te.dwSize >= FIELD_OFFSET(THREADENTRY32, th32OwnerProcessID) +
sizeof(te.th32OwnerProcessID)) {
printf("Process 0x%04x Thread 0x%04x\n",
te.th32OwnerProcessID, te.th32ThreadID);
}
te.dwSize = sizeof(te);
} while (Thread32Next(h, &te));
}
CloseHandle(h);
}
return 0;
}
非常感谢大卫。这就是我一直在寻找的:) – 2011-03-23 13:16:48
我感谢你对此的快速回复。这是一个更好的理由去爱。 – 2011-03-23 13:17:47