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

Nek*_*eka 8 c++ windows wxwidgets

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

有时消息是(地址)内存不能"读",有时不能"写".

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

如何模拟"windows shutdown"以便我可以调试我的应用程序?如何才能找出应用程序尝试执行的操作?

Nia*_*all 6

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

你可以尝试做一些事情;

  • 关机顺序将是不容易模仿(如果有的话) -关闭期间发生了很多; 确切的状态和情况难以完全模拟.
  • 在关闭之前诊断应用程序的状态方面,您可以尝试处理WM_QUERYENDSESSION并响应FALSE以防止它关闭(使用较新版本的Windows,您无法再阻止关闭,因此它可能无法工作,具体取决于你所在的平台).
  • 您还可以尝试WM_ENDSESSION通过向MSDN上详细说明的相应数据发送WM_ENDSESSION(例如,通过a PostMessage)来测试应用程序对消息的即时响应.

对于基于终端的应用; SIGKILL如果需要,你也可以挂钩信号(我相信).有关详细信息,请参阅此Microsoft 参考.你也可以SetConsoleCtrlHandler勾手.但是,由于您使用工具包,最好使用已发送到应用程序的消息.

  • 模拟关闭并不是那么容易,特别是因为现代Windows版本只是在它没有足够快地返回时才会杀死它.测试这个的最好方法是在VM中运行您的应用程序并真正关闭它. (2认同)