GetProcessID与GetThreadID

时间:2015-08-20 16:24:10

标签: c++ windows multithreading gcc

当我执行以下代码时: -

#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
    cout << GetCurrentProcessId() << endl;
    cout << GetCurrentThreadId() << endl;
}

我得到以下输出 - :

1160
4316

我的问题是 - :

  • 由于这是一个独立的过程,它是如何拥有“线程ID”的?
  • 为什么输出中的两个整数不同?

我在Windows 7上使用C ++ 14和TDM-GCC 4.9.1编译器。

2 个答案:

答案 0 :(得分:4)

由于您使用的是Windows,这就是MSDN所说的内容:

Processes and Threads

  

应用程序由一个或多个进程组成。最简单的过程是一个执行程序。一个或多个线程在进程的上下文中运行。线程是操作系统分配处理器时间的基本单元。线程可以执行进程代码的任何部分,包括当前由另一个线程执行的部分。

About Processes and Threads

  

每个进程都提供执行程序所需的资源。进程具有虚拟地址空间,可执行代码,系统对象的打开句柄,安全上下文,唯一进程标识符,环境变量,优先级,最小和最大工作集大小,以及至少一个执行线程。 每个进程都使用一个线程启动,通常称为主线程,但可以从其任何线程创建其他线程。

     

线程是进程中可以安排执行的实体。进程的所有线程共享其虚拟地址空间和系统资源。此外,每个线程都维护异常处理程序,调度优先级,线程本地存储,唯一线程标识符,以及系统将用于保存线程上下文直到调度的一组结构。线程上下文包括线程的一组机器寄存器,内核堆栈,线程环境块和线程进程的地址空间中的用户堆栈。线程也可以有自己的安全上下文,可用于模拟客户端。

答案 1 :(得分:3)

对于Windows,每个进程至少有一个线程,并且可以有多个线程。 Windows对进程和线程使用单独的id。