c++ - Windows 在关闭计算机时如何关闭程序?

标签 c++ windows wxwidgets

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

有时消息是(地址)内存不能“读”,有时不能“写”/strong>.

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

如何模拟“windows shutdown”以便调试我的应用程序?我如何找出应用程序正在尝试执行但它无法执行的操作?

最佳答案

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

您可以尝试做一些事情;

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

用于基于终端的应用程序; 如果需要,您还可以挂接信号(我相信是 SIGKILL)。请参阅此 Microsoft reference for more detail .您还可以 SetConsoleCtrlHandler钩。但是由于您使用的是工具包,所以最好使用已经发送到应用程序的消息。

关于c++ - Windows 在关闭计算机时如何关闭程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30999054/

相关文章:

c++ - 防范函数名隐藏类名的危险

windows - 在本地设置 SVN?

c++ - vxFloatingPointValidator 未将值传递给关联变量

c++ - CUDA 中的三重 For 循环

c++ - boost::random经常在不同状态下从同一种子生成相同值

c++ - Log4cxx 宏不适用于包含空字符的字符串

c++ - wxPuts 是做什么的?

更改指针时 C++ 指针中断

Windows 可执行文件结构

c++ - wxWidgets、Code::Blocks 和 wxStyledTextCtrl = 对 _imp__wxSTCNameStr 的 undefined reference