【问题标题】:GetWindowThreadProcessId Race condition RiskGetWindowThreadProcessId 竞争条件风险
【发布时间】:2013-03-08 00:18:31
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: c# .net winapi pinvoke unmanaged


    【解决方案1】:

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

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

    【讨论】:

    • 老实说,我就是这么想的。只要窗口保持打开状态,hWnd 就不会改变,对吗?如果是这样,那么我认为只有在关闭窗口时我应该关心这个。
    • 是的,没错。很好地处理错误,这没有问题。 Windows 努力避免重复使用句柄。你不会有任何问题。
    猜你喜欢
    • 2015-12-27
    • 2022-01-23
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多