Функции CreateMutex() и ReleaseMutex()

Создается Mutex функцией CreateMutex():

HANDLE CreateMutex
(
LPSECURITY_ATTRIBUTES lpMutexAttributes,// атрибут безопастности
BOOL bInitialOwner,// флаг начального владельца
LPCTSTR lpName// имя объекта
);

Результатом будет дескриптор объекта mutex, если такое имя есть, то дескпритор существующего. Функция GetLastError() при вызове будет выдавать ERROR_ALREADY_EXISTS.

Для освобождения объекта нужно вызвать функцию ReleaseMutex():

BOOL ReleaseMutex
(
HANDLE hMutex// дескриптор mutex
);

При успешном выполнении вернет ненулевое значение.

По окончанию дескриптор нужно закрыть вызвав CloseHandle(). Давайте посмотрим пример использования Mutex для запрета запуска двух приложений. 

// CreateMutex.cpp : Defines the entry point for the console application.
//


#include "stdafx.h"
#include "windows.h"
#include "iostream.h"

void main()
{
HANDLE mut;
mut = CreateMutex(NULL, FALSE, "FirstStep");
DWORD result;
result = WaitForSingleObject(mut,0);
if (result == WAIT_OBJECT_0)
{
cout << "programm running" << endl;
int i;
cin >> i;
ReleaseMutex(mut);
}
else
cout << "fail programm running" << endl;
CloseHandle(mut);
}

При запуске программы она создает объект с именем "FirstStep", если захватить его удается WaitForSingleObject(), то программа выполняется якобы, ждет пока Вы введете число и нажмете Enter. Если захватить его не удается, то выходит с надписью fail. Если Вы попробуете, то Вы сможете запустить только одну копию.

 
« Предыдущая статья   Следующая статья »