1

我正在考虑使用命名管道来调试 DLL 的输出。我的 DLL 由一个专有的封闭源程序加载,该程序时不时崩溃。问题是当程序崩溃时,我当前的一些日志输出会丢失,因为 Windows 在写入磁盘之前会清理所有内容。

所以我的问题是,如果我在一个单独的进程中创建一个命名管道并从我的 DLL 连接到它,并且我的 DLL 崩溃并被清理的进程,我是否仍然能够读取刚刚写入命名管道的数据我的第二个过程的崩溃?

我必须在非阻塞(缓冲)庄园中写入命名管道,以尽可能少地影响时间,最好的配置是什么?IO重叠?有人可以给一个好的阅读链接吗?(我不是 C++ 初学者,但我是 WinAPI 初学者)

4

1 回答 1

1

我不相信命名管道缓冲数据能在一个合作伙伴的失败中幸存下来。即使您设法重新打开管道,旧实例中的任何数据都将消失。

您可以改用内存映射文件(用于进程间共享内存的 Windows 机制),但您必须小心处理共享数据空间的状态 - 当进程再次唤醒时在哪里恢复写入新数据?也许是水槽发出的某种“我已经读到这里”的指示。您还必须在源中写入数据时刷新数据,以避免您在此问题中认识到的问题,这可能会使性能低于标准,但您可以先测试,然后再调整。

于 2013-02-08T19:02:50.253 回答