Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 列出线程_C++_Visual C++ - Fatal编程技术网

C++ 列出线程

C++ 列出线程,c++,visual-c++,C++,Visual C++,这段代码它列出了所有进程和进程的所有线程,但我希望它只列出一个进程的线程的pid。。。 例子: explorer.exe pid=5454 通过pid,您希望他拥有线程ID和线程状态。您的代码实际上可以工作。只需要一点改变: HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); if (h != INVALID_HANDLE_VALUE) { THREADENTRY32 te; te.dwSize = sizeof(te

这段代码它列出了所有进程和进程的所有线程,但我希望它只列出一个进程的线程的pid。。。 例子: explorer.exe pid=5454
通过pid,您希望他拥有线程ID和线程状态。

您的代码实际上可以工作。只需要一点改变:

 HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
 if (h != INVALID_HANDLE_VALUE) {
  THREADENTRY32 te;
  te.dwSize = sizeof(te);
  if (Thread32First(h, &te)) {
   do {
     if (te.dwSize >= FIELD_OFFSET(THREADENTRY32, th32OwnerProcessID) +
                      sizeof(te.th32OwnerProcessID)) {
                          HANDLE Handle = OpenProcess(
        PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
        FALSE,
        te.th32OwnerProcessID /* This is the PID, you can find one from windows task manager */
    );
                          TCHAR Buffer[MAX_PATH];
       wprintf(L"Process %u IdThred=%u\n",
             te.th32OwnerProcessID, te.th32ThreadID);
     }
   te.dwSize = sizeof(te);
   } while (Thread32Next(h, &te));
  }
  CloseHandle(h);
 }

我不太确定你在问什么,但这可能会有帮助。如果你能对更改进行评论,不仅发布新代码,而且发布我想获取他不可见的信息的过程,这代码对他不起作用,那就太好了。还有别的办法吗?你能详细告诉我你需要什么吗?我不明白你的评论。很抱歉
HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if (h != INVALID_HANDLE_VALUE)
{
    THREADENTRY32 te;
    te.dwSize = sizeof(te);
    if (Thread32First(h, &te))
    {
        do
        {
            //in THREADENTRY32 structure there is a member called th32OwnerProcessID
            //you can check owner process of thread like this:
            if (te.th32OwnerProcessID == 5454)
            {
                wprintf(L"Process %u IdThred=%u\n", te.th32OwnerProcessID, te.th32ThreadID);
            }
        } while (Thread32Next(h, &te));
    }
    CloseHandle(h);
}