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

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

スレッド情報の一覧

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

スレッド情報を取得するにはThread32First()Thread32Next()関数を使います。
手順は次のようになります。(戻る)

  1. スレッド情報を含むスナップショットを作成(CreateToolhelp32Snapshot)
  2. 最初のモジュール情報を取得(Thread32First)
  3. 続きのモジュール情報を取得(Thread32Next)
  4. スナップショットを破棄(CloseHandle)

プロトタイプ宣言

BOOL Thread32First(
    HANDLE              hSnapshot,      // スナップショットのハンドル
    LPTHREADENTRY32     lpte            // スレッド情報の格納構造体
);

BOOL Thread32Next(
    HANDLE              hSnapshot,      // スナップショットのハンドル
    LPTHREADENTRY32     lpte            // スレッド情報の格納構造体
);

構造体

typedef struct tagTHREADENTRY32 {
    DWORD   dwSize;                 // 構造体のサイズ
    DWORD   cntUsage;               // 参照カウント数
    DWORD   th32ThreadID;           // スレッドID
    DWORD   th32OwnerProcessID;     // プロセスID
    LONG    tpBasePri;              // 基本優先順位レベル
    LONG    tpDeltaPri;             // (未使用)
    DWORD   dwFlags;                // (未使用)
} THREADENTRY32, *LPTHREADENTRY32;

サンプル

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

// メイン関数
int main( void )
{
    static LPCTSTR Msg[] = {
        TEXT(" No.  Usage ProcID ThreID BasPri DltPri  dwFlags\n"),
        TEXT("---- ------ ------ ------ ------ ------ --------\n"),
    };
    HANDLE hSnapshot;
    INT nCount = 0;
    
    if ( (hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0)) != INVALID_HANDLE_VALUE ){
        THREADENTRY32 te32;
        te32.dwSize = sizeof( THREADENTRY32 );
        printf( Msg[0] );
        printf( Msg[1] );
        
        if ( Thread32First(hSnapshot,&te32) ){
            do {
                printf( "%3d: ",    ++nCount );
                printf( "%6d ",     te32.cntUsage );
                printf( "%6d ",     te32.th32OwnerProcessID );
                printf( "%6d ",     te32.th32ThreadID );
                printf( "%6d ",     te32.tpBasePri );
                printf( "%6d ",     te32.tpDeltaPri );
                printf( "%08X\n",   te32.dwFlags );
            } while ( Thread32Next(hSnapshot,&te32) );
        }
        CloseHandle( hSnapshot );
        printf( Msg[1] );
    }
    printf( "スレッド数:%d個\n", nCount );
    return 0;
}
  • ヘッダファイルとしてtlhelp32.hをインクルードして下さい。

関連記事



コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« プロセス情報の一覧 | トップ | デバイスドライバの列挙 »
最新の画像もっと見る

コメントを投稿

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