c语言中如何获取进程号,c – 如何获取进程的主线程ID(以其ID名称)?

你能帮我找到ID过程给定的主(唯一)线程ID吗?

任务上下文:

正在运行的进程(目前)没有窗口而是(某些)线程.

通缉:

仅在主线程上发布WM_QUIT.

未想:

使用TerminateProcess或在非主线程上发布WM_QUIT.

@H_403_12@解决方法

#ifndef MAKEULONGLONG

#define MAKEULONGLONG(ldw,hdw) ((ULONGLONG(hdw) << 32) | ((ldw) & 0xFFFFFFFF))

#endif

#ifndef MAXULONGLONG

#define MAXULONGLONG ((ULONGLONG)~((ULONGLONG)0))

#endif

bool CloseProcessMainThread(DWORD dwProcID)

{

DWORD dwMainThreadID = 0;

ULONGLONG ullMinCreateTime = MAXULONGLONG;

HANDLE hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);

if (hThreadSnap != INVALID_HANDLE_VALUE) {

THREADENTRY32 th32;

th32.dwSize = sizeof(THREADENTRY32);

BOOL bOK = TRUE;

for (bOK = Thread32First(hThreadSnap,&th32); bOK;

bOK = Thread32Next(hThreadSnap,&th32)) {

if (th32.th32OwnerProcessID == dwProcID) {

HANDLE hThread = OpenThread(THREAD_QUERY_INFORMATION,TRUE,th32.th32ThreadID);

if (hThread) {

FILETIME afTimes[4] = {0};

if (GetThreadTimes(hThread,&afTimes[0],&afTimes[1],&afTimes[2],&afTimes[3])) {

ULONGLONG ullTest = MAKEULONGLONG(afTimes[0].dwLowDateTime,afTimes[0].dwHighDateTime);

if (ullTest && ullTest < ullMinCreateTime) {

ullMinCreateTime = ullTest;

dwMainThreadID = th32.th32ThreadID; // let it be main... :)

}

}

CloseHandle(hThread);

}

}

}

#ifndef UNDER_CE

CloseHandle(hThreadSnap);

#else

CloseToolhelp32Snapshot(hThreadSnap);

#endif

}

if (dwMainThreadID) {

PostThreadMessage(dwMainThreadID,WM_QUIT,0); // close your eyes...

}

return (0 != dwMainThreadID);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值