有这么个点子也许有一天你突发奇想:无效线程ID使用

有这样的想法

也许有一天你心血来潮:你想要一个特殊的值来表示一个无效的线程或进程 ID。

可以使用的值有哪些?

在 Microsoft 的技术文档中,没有专门的文章讨论此问题。不过,你这么聪明线程标识符 有什么用,一定有什么好主意吧?

如果你需要一个特殊的值来表示一个无效的线程 ID,你可以使用 0。

你可能会问:为什么可以用 0 来表示无效的线程 ID?

兄台好视力

让我们看一下这个 API:SetWindowsHookEx。如果你仔细观察,你会发现如果你传递一个 0 的值作为参数线程标识符 有什么用,那么这个钩子就会安装在当前桌面的所有线程上。这隐含地意味着 0 本身不是有效的线程 ID?为什么?因为如果它是一个有效的线程,微软为什么要在所有线程上安装钩子?

另一个API是GetThreadID,如果这个API调用失败,它会返回一个0作为它的错误返回值。

同样,如果您需要一个无效的进程 ID,您可以使用 (DWORD)-1。

此语句来自此 API:AllowSetForegroundWindow。宏定义了 ASFW_ANY(值 -1) 有其特殊含义:该值表示进程是无效进程。

或者,您可以使用 0 作为无效的进程 ID,因为它会被 API GetProcessId 和 GetProcessIdOfThread 作为错误返回。

总结

记住一句话就够了:无效的线程ID用0表示,无效的进程ID用(DWORD)-1或0表示。

注意这里的DWORD类型转换,但不要再掉入有符号和无符号的坑了。(参考唐伯虎原作:虎惊图)

最后

Raymond Chen 的“The Old New Thing”是我最喜欢的博客之一。里面包含了很多关于Windows的小知识,对广大Windows平台开发者来说真的很有帮助。

本文来自:《无效的线程和进程ID》

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论