【发布时间】:2017-08-11 09:35:18
【问题描述】:
我正在为 Windows 编写一段 C++ 代码,它需要查询进程及其每个单独线程的时间。
为了进行必要的系统调用,我需要进程及其每个线程的句柄。我正在使用getCurrentProcess 和getCurrentThread 函数,它们都返回一个伪句柄。经过进一步检查,我注意到所有线程的伪句柄共享相同的值。
在互联网上进行了简短搜索后,我发现以下文章报告了与我得到的进程和线程伪句柄相同的值:https://weseetips.wordpress.com/2008/03/26/getcurrentthread-returns-pseudo-handle-not-the-real-handle/
我的问题:从一个线程调用一次getCurrentThread 并在所有其他线程中使用返回的伪句柄让它们引用自己是否安全和/或已定义?
使用当前的实现,这可以按预期工作。我只是想知道这种行为是否得到保证。换句话说,它是否可以在任何提供getCurrentThread 功能的Windows 平台上运行?改变行为是否会被视为重大改变?
documentation for the getCurrentThread function 状态(强调我的):
伪句柄是一个特殊的常量,解释为 当前线程句柄。 调用线程可以使用这个句柄 每当需要线程句柄时指定自己。 [...]
这让我相信这个特殊的伪句柄只是“当前线程”的别名,因此可以在所有线程之间共享以让它们引用自己。另一方面,文档还说调用线程可以使用返回值,因此我很困惑!
【问题讨论】:
-
伪句柄类似于
.目录条目。如果您执行cd AnotherDirectory,仍然有一个.目录条目,但它现在指的是新的当前目录。