VC怎么使用API获取主线程?

VC怎么使用API获取主线程?,第1张

虽然有主线程这一说法(调用main的线程),但对于WINDOWS来说,所有线程都是平等的,并没有主次之分,因此也不会提供获得主线程的函数弯搭早码或方法.但要找到调用main的线程倒是有些方法可行的,虽然不一定正确.

1,获取线程的创建时间,通常情况下主线程的创建时间是最早的

2,如果是GUI程序,可以通过GetWindowThreadProcessId获取窗口的线程,通常程序员都使用主线程创建窗口

3,其中有一种是线程堆栈查找main函数的地址,如果发现了那就是所谓的主线程.

其实这个问题跟窗口一样,对于程序员来说一个进埋睁拿程有主窗口,但对于WINDOWS来说只有父窗口和子窗口的概念(但据<WINDOWS核心编程>里的说法,WINDOWS连线程的父子关系也不保存),所以也没用获取主窗口的API

VC 获取进程线程枝枯颂数

#include <tlhelp32.h>

void EnumProcess(void)

{

HANDLE hProcessSnap

HANDLE hProcess

PROCESSENTRY32 pe32

DWORD dwPriorityClass

hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

if (hProcessSnap == INVALID_HANDLE_VALUE)

{

return

}

pe32.dwSize = sizeof(PROCESSENTRY32)

if (!Process32First(hProcessSnap, &pe32))

{

CloseHandle(hProcessSnap)

return

}

do

{

//printf("%s", pe32.szExeFile)//完整文件名

//printf("%d", (int)pe32.cntThreads)//线程数

}while(Process32Next(hProcessSnap, &pe32))

CloseHandle(hProcessSnap)

}

如果要获取进程句柄

HANDLE hProcessHandle

hProcessHandle = OpenProcess(0x1F0FFF, true, ProcessID)//ProcessID进程ID

这个在控制台,Win32 SDK ,MFC 都败闷可以用的,只不过

SDK ,MFC 输出就 不用 printf 了,只猛郑要把获取的内容赋给变量就行了

用GetCurrentThread得到枝岩当前姿盯线程的伪句柄,然后利用这个伪句柄猛册御调用GetThreadPriority,GetThreadTimes之类的函数就可以得到当前线程的信息


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8183068.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存