2017-02-07 14 views
2

My 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. Только если первый процесс убит, записываются данные второго процесса. Где я иду не так?

Примечание: Эта проблема возникает только на нескольких машинах.

+1

Вы испускают обработку ошибок из вашего примера? Обратите внимание, что 'CreateMutex' может возвращать' NULL'. – Default

+0

Кроме того, 'WaitForSingleObject' также может возвращать разные результаты. Вы можете проверить пример [здесь] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms686927 (v = vs.85) .aspx) для использования мьютексов с 'CreateMutex' и 'WaitForSingleObject' – Default

+0

Хотя, я бы, скорее всего, рекомендовал использовать [' lock_guard'] (http://en.cppreference.com/w/cpp/thread/lock_guard). – Default

ответ

0

Попробуйте это:

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); 
//... 
+0

Пожалуйста, зарегистрируйтесь. Я пробовал это. Даже это дало мне ту же ошибку –

+0

Упс. Этот комментарий был скрыт по какой-то причине. – Laszlo

+0

Да .. Кажется, что комментарии спрятаны автоматически, если они растут: - / –