Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果另一个线程导致进程在windows上崩溃,如何延迟进程的销毁?_C++_Multithreading_Winapi - Fatal编程技术网

C++ 如果另一个线程导致进程在windows上崩溃,如何延迟进程的销毁?

C++ 如果另一个线程导致进程在windows上崩溃,如何延迟进程的销毁?,c++,multithreading,winapi,C++,Multithreading,Winapi,我正在写一个DLL,它是由一个封闭源代码的专有程序加载的,我无法控制它。我还加载了一个专有的DLL,它同样晦涩难懂。由于有时我必须将通过DLL接口获得的命令中继到加载的DLL,延迟非常低,因此在初始化DLL时,我会启动一个单独的分离线程,并通过无锁队列发送未格式化的调试信息。因此,调试输出和写入日志文件的耗时格式化是异步完成的。问题是进程意外崩溃(我几乎可以肯定这不是我的错),我无法知道最后的调试信息是什么,因为我分离的线程在写入磁盘之前就被windows杀死了 所以我的问题是: 如果专有程序

我正在写一个DLL,它是由一个封闭源代码的专有程序加载的,我无法控制它。我还加载了一个专有的DLL,它同样晦涩难懂。由于有时我必须将通过DLL接口获得的命令中继到加载的DLL,延迟非常低,因此在初始化DLL时,我会启动一个单独的分离线程,并通过无锁队列发送未格式化的调试信息。因此,调试输出和写入日志文件的耗时格式化是异步完成的。问题是进程意外崩溃(我几乎可以肯定这不是我的错),我无法知道最后的调试信息是什么,因为我分离的线程在写入磁盘之前就被windows杀死了

所以我的问题是:

  • 如果专有程序崩溃,使我分离的线程在销毁前运行更长时间,我可以以任何方式延迟销毁吗
  • 进程间通信会通过将分离的线程移动到windows不会杀死的另一个进程来解决我的问题吗?如果是这样的话,你会建议什么方法(我与IPC的合作不多)
  • 如果我使用IPC,我如何知道何时终止“调试格式化过程”
我认为,即使使用IPC,在进程故障期间,您的线程也可能有未写入的调试信息。假设您不需要一直进行调试,因此我认为您不需要单独的线程,只需要一个编译时或运行时选项来启用它。您可以
为进程设置UnhandledExceptionFilter
,并在终止之前执行一些操作。

是否允许侦听127.0.0.1上的IPC端口?@thang是的,这是最好的方法吗?是的,优点是当应用程序崩溃时,套接字关闭,因此您可以从侦听器中判断它崩溃了。真的没有办法阻止撞车。在某些情况下,您可以延迟卸载dll,但如果是崩溃,您可能没有这个机会。+1实际上值得一试。并不是对每种崩溃都有效,但这应该涵盖很多内容,而且添加起来非常简单。