在 POSIX OS 下,有信号 API 允许向进程发送信号以使用 kill 将其关闭,您可以使用 sigaction 捕获它并执行您需要的操作;
但是,Win32 不是 POSIX 系统,所以:
- 如何处理可能出现的关闭事件,例如来自“任务管理器”中的“结束进程”?
- 向 Win32 应用程序发送关机信号的标准 API 是什么?
我不是在谈论 GUI,我在谈论应该很好地关闭的 TCP/IP 服务器。它不像 Windows 服务那样运行。
MSDNs Unix Code Migration Guide有一章是关于Win32 代码转换和信号处理的。
尽管 Microsoft 已决定将这份出色的指南存档,但它非常有用。
描述了三种方法:
原生信号
事件对象
消息
WM_QUIT
您在第一个创建的线程上收到一条消息。
如果您不处理,您的进程将被强制关闭。
所以只需在你的第一个线程中实现一个消息队列,它会查找WM_QUIT
消息
可能来自MSDN的 Windows 电源管理会有所帮助。但它处理系统事件而不是每个进程。
对于一个进程,您将能够使用 检测终止WM_CLOSE
。您需要处理 Windows 消息。如果它是一个控制台应用程序,您需要安装一个控制处理程序;看看MSDN上的SetConsoleCtrlHandler