C ++线程/进程标识符

时间:2008-10-06 16:41:40

标签: c++ multithreading process

是否有可移植方式使用C ++获取线程和/或进程标识符(string,int,...)?

8 个答案:

答案 0 :(得分:9)

你有几种方法,但都暗示使用外部库为你抽象线程。

在受欢迎的选择中,有两个是:

  1. Boost.Thread库。这是最便携的,但与Boost合作,这是一个巨大的图书馆
  2. Qt库。这不太便于携带,并且意味着可以使用Qt这个大型图书馆。
  3. 如果您已经在这两个库上使用了任何一个,我建议坚持使用它。否则,请查看他们提供的其他工具并做出选择。

答案 1 :(得分:7)

当可移植意味着可以在每个平台上运行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将一些POSIX调用转换为内部API调用 - SFU 3.5或更高版本,但有一些方法可以通过外部库在Windows上获得一些POSIX功能(Cygwin提供了LGPL库,您可以链接到您的应用程序以在Windows上启用相当数量的POSIX功能)。

POSIX的优势不仅在于它相对广泛,而且它是标准化的,您可以轻松地在互联网上查找标准。使用POSIX调用,您可以获得线程ID和进程ID。

答案 2 :(得分:1)

我一直认为线程来自C ++。在Java中,内置了该语言的本机线程。

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

答案 3 :(得分:1)

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

还要检查一下他们可能有的东西。

答案 4 :(得分:1)

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

答案 5 :(得分:0)

我不确定它们有多便携,但Posix threads可能是您想要考虑的另一种选择。另见here。我同意史蒂夫的评论 - 可移植到哪些平台?

答案 6 :(得分:0)

getpid()是获取进程ID的便携方式。

答案 7 :(得分:0)

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