C++线程/进程标识符
C++ thread/process identifier
有没有一种可移植的方法可以使用C++获取线程和/或进程标识符(字符串,整数,...)?
您有几种方法,但都意味着使用外部库为您抽象线程。
在流行的选择中,有两个是:
- 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 - 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)将有自己的机制。
- boost::进程间消息队列引发错误
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 是否可以通过C++扩展强制多个python进程共享同一内存
- IPC使用多个管道和分支进程来运行Python程序
- #ifdef和未声明的标识符
- 异常属于C++中的线程还是进程
- WMI检测进程创建事件-c++
- f2、f3、f4标识符未找到
- c++多进程编写一个唯一的文件
- 如何在C++中将函数发送到另一个进程
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 设置 Visual Studio for MPI: 找不到标识符错误
- 未声明的标识符编译暗黑破坏神 2 程序"muleview"
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- Google protobuf 时间戳未声明标识符,在 Windows 上具有C++
- 如何让 GCC/Clang 在保留标识符上出错
- 获取进程标识符始终返回 0
- 从HWND获取图标进程,进程名或其他进程标识符
- C++线程/进程标识符