Создается 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. Если Вы попробуете, то Вы сможете запустить только одну копию. |