debra 发表于 2022-8-17 10:12:41

C++枚举线程方法与源码


主要使用的下面几个函数:
1、CreateToolhelp32Snapshot
2、Thread32First
3、Thread32Next

所以要引用下面的头文件:
#include <tlhelp32.h>

枚举线程的代码如下:
// 枚举系统当前所有线程信息
// 并把信息输出到工程目录下EnumInfo_thread.txt
BOOL EnumThreadInfo ()
{
    // 定义线程信息结构
    THREADENTRY32 te32 = {sizeof(THREADENTRY32)} ;

    //创建系统线程快照
    HANDLE hThreadSnap = CreateToolhelp32Snapshot ( TH32CS_SNAPTHREAD, 0 ) ;
    if ( hThreadSnap == INVALID_HANDLE_VALUE )
      return FALSE ;

    // 输出线程信息到文件
    ofstream fout ( "EnumInfo_thread.txt" ) ;

    // 循环枚举线程信息
    if ( Thread32First ( hThreadSnap, &te32 ) )
    {
      do{
            fout << "ThreadId : "   << te32.th32ThreadID << endl ;
            fout << '\t' << "OwnerProcessID : " << te32.th32OwnerProcessID << endl ;
            fout << '\t' << "Usage          : " << te32.cntUsage << endl ;
            fout << '\t' << "Delta Priority : " << te32.tpDeltaPri << endl ;
            fout << '\t' << "Base Priority: " << te32.tpBasePri << endl ;
      }while ( Thread32Next ( hThreadSnap, &te32 ) ) ;
    }
    fout.close () ;
    CloseHandle ( hThreadSnap ) ;
    return TRUE ;
}
页: [1]
查看完整版本: C++枚举线程方法与源码