发送/捕获的Win32 API模拟信号SIGTERM
问题描述:
在POSIX OS下,有一个信号API允许发送一个信号来处理关闭它 杀死并且你可以用sigaction捕获它并做你需要的;发送/捕获的Win32 API模拟信号SIGTERM
然而,Win32的不POSIX系统,所以:
- 我如何处理可能到来的关机事件,例如在“任务管理器”,“结束进程”?
- 发送关机信号到Win32应用程序的标准API是什么?
我不是在谈论GUI,我正在谈论TCP/IP服务器应该很好地关闭。那不是就像windows服务一样运行。
答
你得到你的第一个创建的线程上WM_QUIT
消息。
当你不处理它时,你的过程被强制关闭。
因此,只要实现你的第一个线程,这看起来对于WM_QUIT
消息
答
可能是Windows电源管理从MSDN将是有帮助的。但它涉及系统事件而不是每个进程。
对于一个过程,您将能够使用WM_CLOSE
检测终止。你需要处理Windows消息。如果它是一个控制台应用程序,则需要安装控制处理程序;看看SetConsoleCtrlHandler MSDN上
答
MSDNs UNIX代码迁移指南有一章关于Win32 code conversion and signal handling。
虽然微软已经决定归档这个辉煌的指南,但它非常有用。
三种方法进行了描述:
本地信号
事件对象
消息
你应该处理WM_CLOSE消息队列。 “WM_QUIT消息与窗口没有关联,因此永远不会通过窗口的窗口过程接收,只能通过GetMessage或PeekMessage函数获取。” -MSDN – Indy9000 2009-08-01 15:46:44