有这样的想法
也许有一天你心血来潮:你想要一个特殊的值来表示一个无效的线程或进程 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》
请登录后发表评论
注册
社交帐号登录