Я делаю это уже. Я хотел бы знать, как заставить это работать. Глобального мьютекса недостаточно, потому что кажется, что каждый процесс имеет свой собственный буфер, который записывается на диск, когда Windows считает, что должен.

дал небольшое решение C ++ Tracing, которое работает очень хорошо. Внутри одного процесса все хорошо, но когда я открываю выходной файл из разных процессов, данные записываются неправильно. Я открыл файл с помощью FILE_SHARE_WRITE, чтобы иметь возможность записи в файл, когда он уже открыт. Затем я создал именованный мьютекс, чтобы обеспечить правильную синхронизацию между процессами. Но, похоже, этого недостаточно. Согласно MSDN это работает внутри одного процесса, но не между разными процессами. Затем я попытался вызывать FlushFileBuffers после каждой записи, пока мьютекс еще удерживался, но данные все еще искажались, как это

Формат: идентификатор процесса времени / метод идентификатора потока, введите имя / пространство / серьезность пространства имен + метод, а затем текст сообщения.

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 но это имеет серьезные ограничения и кажетсяне прост в использовании.

Кто-нибудь знает правильный способ записи синхронизированных в тот же файл без искажения вывода?

С уважением,

Алоис Краус

Ответы на вопрос(5)

Ваш ответ на вопрос