您的位置:首页 > 编程语言 > C语言/C++

windows C++ 获得一个进程的线程数目

2012-08-23 00:14 281 查看
主要是想实现一个函数,判断本进程是否是多线程。根据情况 显示不同的内容。

现在还不知道 待补充。。。

mark。

研究了一下 去看雪论坛 找了下资料 有一个示例
http://bbs.pediy.com/showthread.php?t=98078
然后 我琢磨了半天 终于写了一个简单的示例

http://bbs.pediy.com/showthread.php?p=1098221#post1098221

http://baike.baidu.com/view/589425.htm 这里的也可以。

#include <TlHelp32.h>

void TestProcessGetThreadNumber()
{

int i = 0;
char Buff[9];
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);

HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
{
printf("CreateToolhelp32Snapshot 调用失败.\n");
return ;
}
BOOL bMore = ::Process32First(hProcessSnap,&pe32);

HANDLE hProcess;

printf("%-30s %-20s %-20s %-15s\n","szExeFile","th32ProcessID","th32ParentProcessID","cntThreads");
while(bMore)
{
printf("%-30s ",pe32.szExeFile);
printf("%-20d ",pe32.th32ProcessID);
printf("%-20d",pe32.th32ParentProcessID);

//显示进程的线程数
printf("%-15d\n",pe32.cntThreads);

bMore = Process32Next(hProcessSnap,&pe32);
i++;

//pe32.th32ModuleID
}

printf("进程数:%d\n",i);
system("pause");
exit(0);
}


今天 还遇到的一个问题是 string.data() 出来,使用atoi()获得的int整数,范围 太小了。需要使用atoll 之类的函数,但是没有。

在 shlwapi.h 库中 有一个可以使用StrToInt64A

定义为:

LWSTDAPI_(BOOL)     StrToInt64ExA(__in LPCSTR pszString, __in STIF_FLAGS dwFlags, __out LONGLONG * pllRet);


第二个参数 填0 即可。1 为十六进制。第一个 是目标 C字符串地址。第三个 参数 是目标 long long的地址。返回值 当然是true false判断是否成功了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐