Цитата: Достаточно CreateMutex и проверить код возврата GetLastError. Если получил ERROR_ALREADY_EXISTS или ERROR_ACCESS_DENIED - значит, мьютекс уже был создан.
Когда я использую CreateMutex, то поиск в ProcessExplorer выдает количество результатов равное количеству процессов. Если для первого процесса сделать CreateMutex, а для остальных OpenMutex, то ProcessExplorer выдаст только один результат.
Где-то читал, что CreateMutex пытается сначала открыть мутекс, и если потерпит неудачу, тогда создаст его. Т.е. если мутекс уже существует, то CreateMutex = OpenMutex, но на практике совсем не так.
Как бы получается, что OpenMutex ничего не открывает, а всего лишь проверяет наличие (есть или нет можно узнать через GetLastError). Оно конечно хорошо (мне как раз нужна функция, которая будет лишь проверять наличие мутекса), но ведь хрень какая-то получается.
PS: экспериментирую с ATL::CMutex
Добавлено: Вот кусок кода (не Я придумал
)
Код: ATL::CMutex m_mutexOneInstance;
...
m_mutexOneInstance.Create(NULL, TRUE, MPC_WND_CLASS_NAME);
if (GetLastError() == ERROR_ALREADY_EXISTS && ...) {
...
}