在Visual Studio中按下“停止调试”按钮时拦截信号/事件

时间:2014-09-16 19:09:33

标签: c++ visual-studio signals

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

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

1 个答案:

答案 0 :(得分:1)

如果您正在使用提升,则可以使用 boost::interprocess::windows_shared_memory

保证在流程结束时释放。

在这种情况下,

Boost只是围绕windows API的一个整洁的包装器。它包装了Windows Named Shared Memory API。