发送/捕获的Win32 API模拟信号SIGTERM

问题描述:

在POSIX OS下,有一个信号API允许发送一个信号来处理关闭它 杀死并且你可以用sigaction捕获它并做你需要的;发送/捕获的Win32 API模拟信号SIGTERM

然而,Win32的不POSIX系统,所以:

  • 我如何处理可能到来的关机事件,例如在“任务管理器”,“结束进程”?
  • 发送关机信号到Win32应用程序的标准API是什么?

我不是在谈论GUI,我正在谈论TCP/IP服务器应该很好地关闭。那不是就像windows服务一样运行。

你得到你的第一个创建的线程上WM_QUIT消息。

当你不处理它时,你的过程被强制关闭。

因此,只要实现你的第一个线程,这看起来对于WM_QUIT消息

+1

你应该处理WM_CLOSE消息队列。 “WM_QUIT消息与窗口没有关联,因此永远不会通过窗口的窗口过程接收,只能通过GetMessage或PeekMessage函数获取。” -MSDN – Indy9000 2009-08-01 15:46:44

可能是Windows电源管理从MSDN将是有帮助的。但它涉及系统事件而不是每个进程。

对于一个过程,您将能够使用WM_CLOSE检测终止。你需要处理Windows消息。如果它是一个控制台应用程序,则需要安装控制处理程序;看看SetConsoleCtrlHandler MSDN上

MSDNs UNIX代码迁移指南有一章关于Win32 code conversion and signal handling
虽然微软已经决定归档这个辉煌的指南,但它非常有用。

三种方法进行了描述:
本地信号
事件对象
消息