C++线程/进程标识符

C++ thread/process identifier

本文关键字:标识符 进程 线程 C++      更新时间:2023-10-16

有没有一种可移植的方法可以使用C++获取线程和/或进程标识符(字符串,整数,...)?

您有几种方法,但都意味着使用外部库为您抽象线程。

在流行的选择中,有两个是:

  1. Boost.Thread 库。这是最便携的,但意味着使用Boost,这是一个巨大的库。
  2. Qt库。这不太便携,意味着与Qt(一个大型库)一起使用。

如果您已经在这两个库上使用过任何库,我建议您坚持使用。否则,请查看他们提供的其他工具并做出选择。

可移植意味着一种在每个平台上工作的方法时,没有可移植的方式,因为存在C++编译器。这种方式必须是C++标准的一部分,在这种情况下,它确实可以在任何地方工作(就像C++标准的其他部分在任何地方工作一样)。标准中没有的所有内容都不保证在任何平台上都能工作,除非平台声明支持此标准。

人们在这里建议的每个解决方案都是使用外部库的解决方案,因此只能在该库支持的平台上工作;并且没有库可用于每个现有平台。

可能最能让你走得更远的是POSIX,毕竟每个类UNIX系统都试图支持至少一些POSIX(越多越好),很少有人可以称自己是真正100%符合POSIX的平台(例如A/UX,AIX,HP-UX,IRIX,Mac OS X 10.5,MINIX,QNX,Solaris,UnixWare,VxWorks,...仅举几例,当然还有更多)。然而,有相当多的平台至少提供一些POSIX支持,一些更多,一些更少,有些几乎符合POSIX(例如FreeBSD,Linux,NetBSD,BeOS,OpenBSD,...等)。

不幸的是,Windows离其中还很远。NT曾经部分符合POSIX,但现在它或多或少已经消失了(Win2000/20003,WinXP和Vista仍然可以设置为POSIX模拟模式,通过安装Microsoft Windows Services for UNIX - SFU 3.5或更高版本将一些POSIX调用转换为内部API调用),但是也有方法可以通过外部库在Windows上获取一些POSIX功能(Cygwin提供LGPL库,您可以与您的应用程序链接到在Windows上启用相当数量的POSIX功能)。

POSIX的优点不仅在于它比较普遍,而且它是标准化的,可以很容易地在互联网上查找标准。使用 POSIX 调用,可以获取线程 ID 和进程 ID。

我一直

认为线程是外部的C++。 在Java中,语言中内置了一个本机线程。

你必须找到一个可移植的线程库。

唯一的方法是使用便携式库。我推荐Qt(它不一定是GUI应用程序)或wxWidgets。如果您正在开发游戏,请查看 SDL

另请查看他们可能有一些东西的提升库。

您还可以使用 ACE 库的一部分,它实现了独立于平台的包装器。查找 PID 将是库中的文件之一(可能是 ACE_Process/ACE_Thread)。

我不确定它们的可移植性如何,但 Posix 线程可能是您要考虑的另一个选项。 另请参阅此处。 我同意史蒂夫的评论 - 可移植到哪些平台?

getpid() 是一种获取进程 ID 的可移植方法。

我认为除非通过包装库,否则您不会找到可移植的方法。每个线程系统(例如Windows或POSIX)将有自己的机制。