CodeInside
@CodeInside

Почему не работает семафор?

Задание: реализовать приложение, которое можно запускать не более чем в трех копиях.
MutexAndSemaphoreDlg::~MutexAndSemaphoreDlg(void)
{
	ReleaseSemaphore(hSemaphore, 1, NULL);
}


void MutexAndSemaphoreDlg::Cls_OnClose(HWND hwnd)
{
	EndDialog(hwnd, 0);
}



BOOL MutexAndSemaphoreDlg::Cls_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
	hSemaphore = CreateSemaphore(NULL, 3, 3, TEXT("{41B4DBD4-F00A-4999-BFA9-1A20D12591B1}"));

	if (WaitForSingleObject(hSemaphore, NULL) == WAIT_TIMEOUT) {
		MessageBox(hwnd, TEXT("Нельзя запускать более трех копий приложения."), TEXT("Семафор"), MB_OK | MB_ICONINFORMATION);
		EndDialog(hwnd, 0);
	}

	return TRUE;
}

Без понятия почему данный семафор не работает. Приложение запускается в большом множестве экземпляров без каких-либо ограничений. Можете помочь?

Тестировал так: запускаю на выполнение один (или несколько, не важно) экземпляр приложения. При этом делаю дебаг. Проверял функцией OpenSemaphore наличие семафора, но каждый раз возвращало NULL, типа его нету. То есть каждый раз когда приложение запускается, оно не видит уже созданный объект ядра, хотя GUID всегда один и тот же.
  • Вопрос задан
  • 245 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Может быть добавить Local\\ к имени семафора?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы