我的 Dll 将数据写入文件“Sample.txt”。
如果Dll被两个进程加载,那么Sample.txt将被两个进程写入。
在那种情况下,只有先写入文件的进程才会继续写入文件。我在 Sample.txt 中看不到第二个进程的数据。我使用 Mutex 在进程之间进行同步。
我的代码如下,
HANDLE MLock = CreateMutex(NULL,FALSE,L"MLock");
WaitForSingleObject(MLock,INFINITE);
ofstream fp;
fp.open("Sample.txt",ios::app);
fp << GetCurrentProcessID();
fp.close();
ReleaseMutex(MLock);
我只能在 Sample.txt 中看到第一个进程的 ID。只有当第一个进程被杀死时,第二个进程数据才会被写入。我哪里错了?
注意:这个问题只发生在少数机器上。
最佳答案
试试这个:
HANDLE MLock = CreateMutex(NULL,FALSE,L"MLock");
if (NULL == MLock)
MLock = OpenMutex(MUTEX_ALL_ACCESS,FALSE,L"MLock");
if (NULL == MLock){
// error return
}
WaitForSingleObject(MLock,INFINITE);
//...
关于c++ - 来自两个进程的同一文件写入失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42086549/