Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;线程/进程标识符 有一种可移植的方法来获取线程和/或进程标识符(String,int,…),用C++ + < /p>_C++_Multithreading_Process - Fatal编程技术网

C++;线程/进程标识符 有一种可移植的方法来获取线程和/或进程标识符(String,int,…),用C++ + < /p>

C++;线程/进程标识符 有一种可移植的方法来获取线程和/或进程标识符(String,int,…),用C++ + < /p>,c++,multithreading,process,C++,Multithreading,Process,您有几种方法,但都暗示使用外部库来为您抽象线程。 在流行的选择中,有两种是: 图书馆。这是最便携的,但意味着使用Boost,这是一个巨大的库 图书馆。这是较少的可移植性,并意味着与Qt,一个大的库工作 如果您已经在这两个库上使用了,我建议您继续使用它。否则,看看他们提供的其他工具,并做出选择。 < P>我一直认为线程是C++外部的。在Java中,语言中内置了一个本机线程 你必须找到一个可移植的线程库。 我不知道它们是多么便携,但可能是你想考虑的另一个选项。另见。我同意Steve的评论——可移植到

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

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

  • 图书馆。这是最便携的,但意味着使用Boost,这是一个巨大的库
  • 图书馆。这是较少的可移植性,并意味着与Qt,一个大的库工作

  • 如果您已经在这两个库上使用了,我建议您继续使用它。否则,看看他们提供的其他工具,并做出选择。

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


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

    我不知道它们是多么便携,但可能是你想考虑的另一个选项。另见。我同意Steve的评论——可移植到哪些平台

    唯一的方法是使用便携库。我推荐(它不一定是GUI应用程序)或者可能。如果你正在开发一款游戏,请查看


    也检查Boost LIBS,它们可能有什么东西。

    < P>当便携式意味着在<强> >每个< /强>平台上工作时,没有一种可移植的方式,因为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的优点不仅在于它相对广泛,而且它是标准化的,您可以轻松地在Internet上查找标准。使用POSIX调用可以获得线程id和进程id。

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

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

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

    portable accross what platforms/architecture?Boost相当大,但请记住,您只需为使用的内容付费。如果您的目的是以可移植的方式获取平台进程ID,那么ACE是许多平台的经验证的解决方案。但是,并非每个平台都可以提供相同的信息。因此万一你得不到你想要的。