繁体   English   中英

C ++线程/进程标识符

[英]C++ thread/process identifier

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

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

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

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

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

我一直认为线程是C ++外部的。 在Java中,有一个内置于该语言的本机线程。

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

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

还可以看看他们可能有什么东西的升级库。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM