1

阅读另一个问题的评论,我发现使用GetWindowThreadProcessIdWindows API 方法时存在遇到竞争条件的风险。这是多大的风险?

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

我希望将代码完全保留在 C# 中,但我并不(完全)反对在必要时将部分代码移到 C/C++ 中。

谢谢!

4

1 回答 1

3

比赛是不可避免的。没有 API 可以自动执行您想要的操作。

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

于 2013-03-08T00:34:37.300 回答