gpt4 book ai didi

c++ - 多个 DLL 写入同一个文本文件?

转载 作者:行者123 更新时间:2023-11-30 04:39:23 24 4
gpt4 key购买 nike

我想为我的一个 COM 对象 (DLL) 添加日志记录支持,并且通常至少加载该对象的两个实例。我希望这两个 DLL 能够将行写入同一个文本文件,但我担心这会给我带来问题。这有可能实现吗?我是否认为单个 Windows API WriteFile 调用是原子的?两个进程是否可以同时打开同一个文件进行写入?

如果可能的话,我想在此处 (std::ofstream) 使用 STL 进行文件处理。我的另一个想法是为每个 DLL 使用单独的日志,但单个日志会更容易管理。

最佳答案

#include <iostream>
#include <fstream>
#include <windosws.h>

struct Mutex {
Mutex () {
h = ::CreateMutex(0, false, "{any-GUID-1247965802375274724957}");
}
~Mutex () {
::CloseHandle(h);
}
HANDLE h;
};

Mutex mutex; // GLOBAL mutex

void dll_write_func() {
::WaitForSingleObject(mutex.h, INFINITE);
////////////////
// Write here
std::ofstrem f("output.txt");
f << "Test" << std::endl;
////////////////
::ReleaseMutex(mutex.h);
}

或者

struct MutexLock {
explicit MutexLock(Mutex & m) : m(m) {
::WaitForSingleObject(m.h, INFINITE);
}
~MutexLock() {
::ReleaseMutex(m.h);
}
Mutex & m;
};

void dll_write_func2() {
MutexLock mlock(mutex);

// Write here
std::ofstrem f("output.txt");
f << "Auto mutex Release" << std::endl;
}

关于c++ - 多个 DLL 写入同一个文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2290154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com