关闭计算机时Windows如何关闭程序?

时间:2015-06-23 09:32:52

标签: c++ windows wxwidgets

如果在我的应用程序运行时关闭计算机,我的应用程序会抛出一些奇怪的错误。

有时消息 (地址)内存无法“读取” ,有时 无法“写入” < /强>

以正常方式关闭应用程序不会生成此类消息。

如何模拟“windows shutdown”以便我可以调试我的应用程序?我怎样才能找出应用程序试图做的事情呢?

1 个答案:

答案 0 :(得分:5)

当Windows想要关闭时,它会向应用程序发送一系列事件;例如WM_ENDSESSIONWM_QUIT。您可以在正在使用的消息处理程序中处理这些内容;一般来说,应用程序需要对这些消息做出适当而快速的响应,否则操作系统无论如何都会终止应用程序。我不确定wxwidgets在这方面提供什么默认处理。挂钩这些将有助于诊断应用程序错误本身。

您可以尝试做一些事情;

  • 关闭序列不容易模拟(如果有的话) - 在关机期间会发生很多事情;确切的状态和情况难以完整地模拟。
  • 在关闭之前诊断应用程序状态方面,您可以尝试处理WM_QUERYENDSESSION并使用FALSE进行响应以防止其关闭(使用较新版本的Windows,您可以不再阻止关机,因此根据您所使用的平台可能无法正常工作。)
  • 您还可以尝试通过向WM_ENDSESSION发送WM_ENDSESSION(例如通过PostMessage)并使用相应的数据来测试应用程序对SIGKILL消息的即时响应。 MSDN。

对于基于终端的应用程序; 如果需要,您还可以挂钩信号(我相信$("button").click(function(){ //uncheck switchery }); )。请参阅此Microsoft reference for more detail。您还可以使用SetConsoleCtrlHandler挂钩。但是,由于您使用工具包,最好使用已发送到应用程序的消息。