プログラミングのメモ帳(C/C++/HSP)

日々のプログラミングで気づいた点や小技集を紹介します。(Windows 10/XP/Vista、VC2017、HSP)

プロセス/スレッド数の取得

2007年10月03日 10時25分20秒 | パフォーマンス関連

プロセス数、スレッド数、モジュール数を取得するにはCreateToolhelp32Snapshot()関数を使います。
この関数でプロセス、スレッド、モジュールの情報をスナップショットとして収集(作成)します。
その後に次の関数で詳細な情報を取り出します。(戻る)

  1. プロセス情報の取得(Process32First,Process32Next)
  2. スレッド情報の取得(Thread32First,Thread32Next)
  3. モジュール情報の取得(Module32First,Module32Next)

プロトタイプ宣言

HANDLE CreateToolhelp32Snapshot(
    DWORD dwFlags,          // スナップショットに含めるフラグ
    DWORD th32ProcessID     // プロセスID(ヒープ情報、モジュール情報のとき指定)
);

BOOL CloseHandle(
    HANDLE hObject          // オブジェクトのハンドル
);

サンプル

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

// メイン関数
int main( void )
{
    DWORD   dwPID = GetCurrentProcessId();
    HANDLE  hSnapshot;
    INT     nModule   = 0;
    INT     nThread   = 0;
    INT     nProccess = 0;
    
    if ( (hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL,dwPID)) != INVALID_HANDLE_VALUE ){
        MODULEENTRY32  me32 = { sizeof(MODULEENTRY32) };
        THREADENTRY32  te32 = { sizeof(THREADENTRY32) };
        PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) };
        
        // モジュール数
        if ( Module32First(hSnapshot,&me32) ){
            do {
                nModule++;
            } while ( Module32Next(hSnapshot,&me32) );
        }
        // スレッド数
        if ( Thread32First(hSnapshot,&te32) ){
            do {
                nThread++;
            } while ( Thread32Next(hSnapshot,&te32) );
        }
        // プロセス数
        if ( Process32First(hSnapshot,&pe32) ){
            do {
                nProccess++;
            } while ( Process32Next(hSnapshot,&pe32) );
        }
        CloseHandle( hSnapshot );
    }
    printf( "モジュール数:%d個\n", nModule );
    printf( "スレッド数:%d個\n", nThread );
    printf( "プロセス数:%d個\n", nProccess );
    return 0;
}
  • 必ず各構造体のdwSizeメンバに構造体のサイズをセットしてから使って下さい。
  • me32.dwSize = sizeof( MODULEENTRY32 );
  • te32.dwSize = sizeof( THREADENTRY32 );
  • pe32.dwSize = sizeof( PROCESSENTRY32 );
  • ヘッダファイルとしてtlhelp32.hをインクルードして下さい。

関連記事



コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« ダブルクリック間隔の取得/設定 | トップ | モジュール情報の一覧 »
最新の画像もっと見る

コメントを投稿

パフォーマンス関連」カテゴリの最新記事