スレッド情報を取得するにはThread32First()、Thread32Next()関数を使います。
手順は次のようになります。(戻る)
- スレッド情報を含むスナップショットを作成(CreateToolhelp32Snapshot)
- 最初のモジュール情報を取得(Thread32First)
- 続きのモジュール情報を取得(Thread32Next)
- スナップショットを破棄(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をインクルードして下さい。
関連記事
- プロセス情報の一覧
- スレッド情報の一覧
- モジュール情報の一覧
※コメント投稿者のブログIDはブログ作成者のみに通知されます