jjzjj

ProcessExit

全部标签

c++ - ProcessExit - DLL 卸载和静态的顺序

有一个EXE,它隐式加载一些DLL和其他显式加载(LoadLibrary)。此EXE正在执行其ExitProcess(剩余进程中的1个线程)并作为忙于卸载DLL的一部分,例如A.DLL。A.DLL(不幸的是)有一个静态的。atexit回调被调用,这个静态的析构函数开始被调用,留下析构函数的踪迹,直到析构函数决定做一些清理并加载一个DLL来做这个。此DLL执行一些方法,直到由于内存访问冲突而发生崩溃,因为它要在此DLL中使用的静态不再存在。查看此静态的堆栈跟踪,其析构函数已作为其DLL卸载的一部分被调用。发生了什么事?DLL已加载,执行了一些方法,开始使用静态(在同一个DLL中)但它已被

c# - ProcessExit 与 DomainUnload

我正在处理一个错误,在该错误中,代码并不总是在应用程序关闭之前执行。该代码位于AppDomain.CurrentDomain.DomainUnload事件的处理程序中。我找到了一个有同样问题的人的帖子,他收到了这个建议“当您的默认应用域发生DomainUnload事件时,您的代码已停止执行。你可能可以做你需要做的事默认AppDomain上的ProcessExit事件。”这对我有用,但我想知道为什么。关于这些事件或它们之间的差异,我没有找到太多信息。我还想知道我是否需要同时订阅两者,或者ProcessExit是否足够。编辑:我想添加更多信息以使其更有用。我忽略了新线程是在它们自己的App