gpt4 book ai didi

c++ - 在 Visual Studio 中按下 'Stop Debugging' 按钮时拦截信号/事件

转载 作者:太空宇宙 更新时间:2023-11-04 11:28:10 25 4
gpt4 key购买 nike

背景:我正在为 API 编写 QA 自动化平台,将格式化结果输出到指定目录。此外,我还开发了一个 GUI 应用程序来分析这些结果。用户可能会运行第二个应用程序来尝试分析测试结果,而我们的自动构建系统正在运行第一个应用程序来修改/生成新的测试数据。为了避免抖动,我让每个应用程序在进行修改时获取文件锁,并在完成后释放它们。在程序正常终止时,如果正在运行的应用程序已获得对数据目录的锁定,则会将其释放。

问题:当任一工具过早存在时(用户按下 CTRL-C,用户在调试器中停止应用程序,或由于错误的 API/应用程序逻辑),我需要能够释放上述文件锁正在测试)。为了处理这个问题,我使用 sigaction 实现了一个信号处理程序它处理拦截致命信号(经过测试和工作),并通过 Win32 函数实现了 ctrl-c 处理程序 SetConsoleCtrlHandler .但是,我似乎无法找到一种方法来拦截用户在 Visual Studio 中按下 Stop Debugging 按钮的事件。我假设此事件会生成类似 SIGKILL/SIGSTOP 的内容(无法通过 sigaction 处理),但我也希望有一些标准库或 Win32 功能来拦截此事件并执行一些清理。你们知道处理这个事件的方法吗?或者这个按钮究竟做了什么来终止正在运行的应用程序?

最佳答案

如果你正在使用 boost,你可以使用 boost::interprocess::windows_shared_memory .

保证在进程结束时释放。

在这种情况下,Boost 只是 Windows API 的简洁包装器。它包装了 Windows Named Shared Memory API。

关于c++ - 在 Visual Studio 中按下 'Stop Debugging' 按钮时拦截信号/事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25876607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com