【发布时间】:2011-01-17 10:30:09
【问题描述】:
我确实创建了一个运行良好的小型 C++ 跟踪解决方案。在一个进程中一切都很好,但是当我从不同进程打开输出文件时,数据没有正确写入。我确实使用 FILE_SHARE_WRITE 打开了文件,以便能够在文件已经打开时写入文件。然后我确实创建了一个命名互斥锁以确保进程之间的正确同步。但似乎这还不够。根据 MSDN,这确实在一个进程内工作,但不在不同进程之间工作。 接下来我尝试在每次写入后调用 FlushFileBuffers,而互斥锁仍然被持有,但数据仍然像这样扭曲
格式是时间进程id/线程id方法进入/离开/严重性命名空间+方法,然后是消息文本。
10:29:42.994 7448/2236 }} Dll2.Test.fndll2 L1 -> Duration: 0.094s
10:29:43.040 7448/2236 {{ Dll2.DllMain L1
10:29:43.134 7448/2236 Info Dll2.DllMain L1 Process detach
10:29:43.181 7448/2236 }} Dll2.DllMain L1 -> Duration: 0.141s
}} Dll2.DllMain L1 -10:29:42.681 7448/2236 Info Dll1.DllMain L1 Process attach
10:29:42.728 7448/2236 }} Dll1.DllMain L1 -10:29:42.744 2216/5510:29:42.775 7448/2236 {{ Dll1.Test.fndll1 10:210:29:42.822 7448/2236 Info Dll1.Test.fndll1 10:29:42.837 2216/557610:29:42.853 7448/2236 }} Dll1.Test.fndll1 L110:29:42.884 2216/557610:29:43.306 7448/2236 {{ Dll1.DllMain L1
10:29:43.353 7448/2236 Info Dll1.DllMain L1 Process detach
10:29:43.400 7448/2236 }} Dll1.DllMain L1 -> Duration: 0.094s
我看过FILE_FLAG_NO_BUFFERING,但它有严重的限制,似乎not easy to use。
有没有人知道在不扭曲输出的情况下同步写入同一个文件的正确方法?
你的,
阿洛伊斯·克劳斯
【问题讨论】:
-
是否可以将您的跟踪解决方案实现为 COM 服务器?