1

这是一个简单的问题 - 无论如何非控制台(即 CWinApp)应用程序可以接收和处理CTRL+ BREAK,它会出现 SetConsoleCtrlHandler 不做这项工作,也不安装信号处理程序?

不幸的是,我正在使用一个在 Microsoft HPC 的控制下运行的基于 CDialog 的遗留应用程序,而 HPC 使用CTRL+BREAK取消该程序(假设我猜他们头脑正常的人不会在后台运行非控制台应用程序)

干杯。

4

1 回答 1

1

调用AttachConsoleATTACH_PARENT_PROCESS应该可以解决问题。这会将您的进程附加到 HPC 控制台,以便它可以接收控制中断信号。您可能应该在调用SetConsoleCtrlHandler之前执行此操作。

如果这不起作用,请尝试AllocConsole。如果 HPC 没有自己的控制台,它可能会假设子进程将创建一个新的控制台组(这对于控制台模式应用程序会自动发生),在这种情况下它将发送一个控制中断信号到子进程PID。如果是这样,控制台组是自动创建还是显式创建都无关紧要。

您可能希望首先通过检查SetConsoleCtrlHandler对于控制台模式应用程序是否按预期工作来确保 HPC 确实正在发送控制中断信号(可能是通过GenerateConsoleCtrlEvent )。如果它改为调用TerminateProcess,那么您无能为力。

于 2012-05-05T09:38:21.610 回答