windows C++ 獲得一個進程的線程數目


 

主要是想實現一個函數,判斷本進程是否是多線程。根據情況 顯示不同的內容。

現在還不知道 待補充。。。

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判斷是否成功了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM