14

在 POSIX OS 下,有信号 API 允许向进程发送信号以使用 kill 将其关闭,您可以使用 sigaction 捕获它并执行您需要的操作;

但是,Win32 不是 POSIX 系统,所以:

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

我不是在谈论 GUI,我在谈论应该很好地关闭的 TCP/IP 服务器。它不像 Windows 服务那样运行。

4

3 回答 3

6

MSDNs Unix Code Migration Guide有一章是关于Win32 代码转换和信号处理的。
尽管 Microsoft 已决定将这份出色的指南存档,但它非常有用。

描述了三种方法:
原生信号
事件对象
消息

于 2009-08-01T15:26:40.440 回答
4

WM_QUIT您在第一个创建的线程上收到一条消息。

如果您不处理,您的进程将被强制关闭。

所以只需在你的第一个线程中实现一个消息队列,它会查找WM_QUIT消息

于 2009-08-01T15:27:43.323 回答
3

可能来自MSDN的 Windows 电源管理会有所帮助。但它处理系统事件而不是每个进程。

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

于 2009-08-01T15:19:58.267 回答