GetWindowThreadProcessId竞争条件风险

时间:2013-03-08 00:18:32

标签: c# .net winapi pinvoke unmanaged

通过阅读another question的评论,我发现使用GetWindowThreadProcessId Windows API方法时存在遇到竞争条件的风险。这有多大的风险?

请允许我提供我正在尝试的内容的背景信息。我正在用C#编写一个计时应用程序供我个人使用。我的目的是让应用程序在活动窗口发生变化时检测(通过Win API调用),以便我可以记录正在使用的应用程序的时间。我已经找到了检测活动窗口何时更改的代码;现在我正在尝试确定与该窗口关联的进程。我在SO上找到了几个指向GetWindowThreadProcessId作为解决方案的帖子,但正如我所提到的,使用它似乎存在潜在的问题。如果GetWindowThreadProcessId不是一种安全的方式,那么我愿意接受其他选择。

我希望将代码完全保留在C#中,但如果有必要,我不会(完全)反对将其中的部分内容转换为C / C ++。

谢谢!

1 个答案:

答案 0 :(得分:3)

比赛是不可避免的。没有API可以原子地做你想要的。

但这是一场相当温和的比赛。什么可能出错?在您询问之前,窗口已关闭。所以你得到一个错误,然后再试一次。您需要做的就是了解竞争条件并优雅地检查和处理错误。