是否有一种使用C++获取线程和/或进程标识符(string,int,...)的可移植方法?
你有几种方法,但都暗示使用外部库为你抽象线程.
在受欢迎的选择中,有两个是:
该Boost.Thread库.这是最便携的,但与Boost合作,这是一个巨大的库
在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将一些POSIX调用转换为内部API调用 - SFU 3.5或更高版本,但是有一些方法可以通过外部库在Windows上获得一些POSIX功能(Cygwin提供了LGPL库,您可以链接到您的应用程序以在Windows上启用相当数量的POSIX功能).
POSIX的优势不仅在于它相对广泛,而且它是标准化的,您可以轻松地在Internet上查找标准.使用POSIX调用,您可以获得线程ID和进程ID.