gpt4 book ai didi

c++ - 如何处理您的 Windows 应用程序被强制关闭?

转载 作者:行者123 更新时间:2023-11-28 06:17:38 25 4
gpt4 key购买 nike

如果用户决定强制关闭我的应用程序(比如通过任务管理器),有没有一种方法可以让我在应用程序关闭之前快速执行一些清理代码?我正在用 C++ 编码,顺便说一句

最佳答案

这取决于指示进程如何关闭。可以在正常退出时执行此操作,但不能强制关闭任何内容。

如果进程通过 TerminateProcess 关闭或 ExitProcess ,您将无法执行任何优雅的清理。 TerminateProcess任务管理器和 Sysinternals pskill 等实用程序如何结束目标进程。 ExitProcess在进程中调用,但通常不用于退出。

如果进程在一个线程(通常是进程中的第一个线程)上有一个消息泵,并且没有其他正在运行的线程正在运行其生命周期独立于该线程中的事件的代码,那么 WM_QUIT消息将发出进程应该关闭的信号(从语义上讲,应用程序应该关闭,你的进程可能会因为其他原因停留一段时间),你可以在收到消息后运行清理代码。根据您的需要,在窗口应用程序中,您可能会考虑最早执行清理操作 WM_CLOSEWM_DESTROY .

如果您在 DLL 中编写了代码,则可以在 DllMain 中处理通知这将允许您执行最后机会清理 (DLL_PROCESS_DETACH),这可能涵盖进程在没有消息泵的情况下退出的情况。但是,这不是对严格依赖任何 C/C++ 运行时(或任何其他 DLL)的代码执行清理的好方法,因为可能会先卸载运行时。

最后,对于任何优雅的关闭,您可以控制在 WinMain 中运行的内容或 main,您始终可以在任一函数返回之前执行您需要执行的任何清理工作,将控制权发送回 Windows 子系统。对于大多数应用程序需求,这是首选,通常也是最安全的。

关于c++ - 如何处理您的 Windows 应用程序被强制关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29934827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com