如果在我的应用程序运行时关闭计算机,我的应用程序会抛出一些奇怪的错误。
有时消息 (地址)内存无法“读取” ,有时 无法“写入” < /强>
以正常方式关闭应用程序不会生成此类消息。
如何模拟“windows shutdown”以便我可以调试我的应用程序?我怎样才能找出应用程序试图做的事情呢?
答案 0 :(得分:5)
当Windows想要关闭时,它会向应用程序发送一系列事件;例如WM_ENDSESSION
和WM_QUIT
。您可以在正在使用的消息处理程序中处理这些内容;一般来说,应用程序需要对这些消息做出适当而快速的响应,否则操作系统无论如何都会终止应用程序。我不确定wxwidgets在这方面提供什么默认处理。挂钩这些将有助于诊断应用程序错误本身。
您可以尝试做一些事情;
WM_QUERYENDSESSION
并使用FALSE
进行响应以防止其关闭(使用较新版本的Windows,您可以不再阻止关机,因此根据您所使用的平台可能无法正常工作。)WM_ENDSESSION
发送WM_ENDSESSION
(例如通过PostMessage
)并使用相应的数据来测试应用程序对SIGKILL
消息的即时响应。 MSDN。对于基于终端的应用程序;
如果需要,您还可以挂钩信号(我相信$("button").click(function(){
//uncheck switchery
});
)。请参阅此Microsoft reference for more detail。您还可以使用SetConsoleCtrlHandler
挂钩。但是,由于您使用工具包,最好使用已发送到应用程序的消息。