Mar*_* Ba 2 windows winapi multithreading visual-c++ windows-kernel
如果我有一个Win32线程,我通过句柄引用它,也可以获取它的线程ID.
在我关闭手柄之前,手柄仍然有效且可用,即使线程已经终止.(否则,无法使用例如GetExitCodeThread
然而,似乎文档未能一致地提及线程终止后线程ID的"发生",但只要任何人仍然拥有终止线程的线程句柄.
线程句柄和标识符表明了这一点
标识符从创建线程到线程终止之间有效.
然后,当我们查看GetThreadId API时,如果ID在线程终止之前只有效,我们可能想知道对于终止线程应该返回什么.(并且还有一个用户评论这个网站:"不正确.只要有一个打开的句柄线程,它的线程ID仍然有效且唯一."这确实回答了这个问题,是的,但没有更多上下文我很谨慎.)
另外,我在SO上的答案中找到了这个片段:
ID是系统中运行的线程的唯一数字标识符.与任何内核对象句柄一样,线程句柄可以看作是指向内核对象的特殊类型的引用计数指针.
如果这是正确的并且线程ID确实是内核对象的ID,那么只要任何句柄打开(因为内核对象需要保留在那里进行查询),似乎必须使该ID保持有效.
我的推理是否合理?只要任何句柄打开,线程ID是否有效?是否有任何 MS文档或权威的书,明确规定一个或其他?
注意:
因此,只有在最后一个线程句柄关闭后才能重用标识符(也就是说,您的假设是正确的).
| 归档时间: |
|
| 查看次数: |
579 次 |
| 最近记录: |