CreateMutexの後のGetLastError
Visual C++ (2003)での話です。
多重起動(二重起動)の抑制でよく紹介されている方法で、
CreateMutex(NULL, TRUE, "IDXXXX"); if (GetLastError() == ERROR_ALREADY_EXISTS) { return; // 多重起動 } setLastError(NO_ERROR);
のようなコードが登場するんですけど、このときGetLastError()が返す値って、NO_ERRORかERROR_ALREADY_EXISTSだけであることが保証されているんでしょうか。ちょっと調べてみましたが、よく分かりませんでした。
安全策として、こうした方が良いと思うんですが、どうなんでしょう。
CreateMutex(NULL, TRUE, "IDXXXX"); if (GetLastError() == ERROR_ALREADY_EXISTS) { return; // 多重起動 } else if (GetLastError() != NO_ERROR) { return; // 多重起動とは別の予期しないエラー } // 要らない?→ setLastError(NO_ERROR);