我想以独立于平台的方式(这意味着没有 #if #else 宏开关)在 C++ 中获得当前实例的某种唯一整数值(无论它是进程 ID 还是其他任何东西)。
基于时间的值不可靠,因为两个实例可以同时启动。
有没有办法做到这一点?
编辑:它不必是全球唯一的。它只需要在系统范围内是唯一的。
我想以独立于平台的方式(这意味着没有 #if #else 宏开关)在 C++ 中获得当前实例的某种唯一整数值(无论它是进程 ID 还是其他任何东西)。
基于时间的值不可靠,因为两个实例可以同时启动。
有没有办法做到这一点?
编辑:它不必是全球唯一的。它只需要在系统范围内是唯一的。
看一下Boost过程。可能正是您正在寻找的。如果您不想包含该库,您可以查看该功能是如何实现的。
这可能是一个矫枉过正,但看看Quuid
我认为,您需要通用唯一标识符
长话短说,答案是否定的,而不是不使用特定于平台的功能。
C++ 语言本身不提供任何机制来做到这一点。事实上,C++ 本身对进程或进程间通信一无所知。如果不使用特定于平台的功能——要么由你手动滚动,这意味着#ifdef
s,要么在像 Boost 这样的跨平台第三部分库中,这也意味着 s——#ifdef
这是无法完成的。
...和...
C++ 语言有一个基本的线程概念,但它没有提供任何机制(我可以看到)来创建进程间通信机制,所以上面仍然适用。