cpr*_*mer 5 c++ multithreading c++11 stdthread
std::thread::id我可以在代码中访问 a ,并且需要使用一些接收参数 ThreadId as DWORD(与返回的相同GetCurrentThreadId())的本机函数。
我找不到任何方法来转换std::thread::id为 Win32 DWORDThreadId。我能找到的最接近的是std::thread有一个native_handle。但我仍然无法创建 来从 astd::thread获取native_handlestd::thread::id,所以我离我需要的还太远。
我有什么遗漏的吗?或者标准可移植线程函数和本机函数之间的差距是否太大以至于标准 api 无法用于我的目的?
这个答案将假设您正在使用std::threadMSVC2015 中的微软示例,并且有关它的记录事实将来不会改变。
没有办法从文档下转到文档下std::thread::id。native_handle
您可以尝试维护一个从std::thread::id到std::thread或native_handles 的表,但这实际上需要一个瓶颈,您可以在其中控制所有std::thread创建。这似乎有点多了。
如果您测试该整数的值,您会发现它与当前时间的std::thread::id本机句柄(以位为单位)相同。因此,您可以进行相当可怕的未定义行为并提取位并转换为整数。不建议这样做,因为您相信微软永远不会更改其未记录的实施细节;这是一个等待发生的错误和维护噩梦。
因此,寻求以不同的方式解决您的问题。直接请求native_handle,或者无需原生 API 即可解决您的问题。在许多情况下,使用本机 API 是一个坏兆头;一半的此类使用涉及尝试从线程外部挂起或终止线程,这在 C++ 中确实是一个非常糟糕的主意(而且通常来说,确实如此)。
| 归档时间: |
|
| 查看次数: |
2424 次 |
| 最近记录: |