2017-02-07 19 views
2

My Dllは "Sample.txt"ファイルにデータを書き込みます。2つのプロセスから同じファイルに書き込みが失敗します

Dllが2つのプロセスによって読み込まれる場合、Sample.txtは両方のプロセスによって書き込まれます。

この場合、最初にファイルに書き込むプロセスだけが書き込みを続けます。私はそのSample.txtの2番目のプロセスのデータを見ることができませんでした。私はプロセス間の同期のためにMutexを使用します。

私のコードは、私がSample.txtをでのみ最初のプロセスのIDを見ることができ、以下のように

HANDLE MLock = CreateMutex(NULL,FALSE,L"MLock"); 
WaitForSingleObject(MLock,INFINITE); 
ofstream fp; 
fp.open("Sample.txt",ios::app); 
fp << GetCurrentProcessID(); 
fp.close(); 
ReleaseMutex(MLock); 

です。最初のプロセスが強制終了された場合にのみ、2番目のプロセスデータが書き込まれます。どこで間違ったんですか?

注:この問題は、いくつかのマシンでのみ発生します。

+1

あなたはあなたの例からエラー処理を放出しましたか? 'CreateMutex'は' NULL'を返すことができます。 – Default

+0

また、WaitForSingleObjectは異なる結果も返すことができます。 Mutexesを 'CreateMutex'でどのように使うかについては、[here](ここ[https://msdn.microsoft.com/en-us/library/windows/desktop/ms686927(v = vs.85).aspx]を参照してください。 '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

ええ..コメントが大きくなると自動的に非表示になります: - / –

関連する問題