Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Не осовобождается Mutex


Автор: Sharkfire 28.3.2010, 15:01
Здравствуйте.

Необходимо запускать дочернюю программу если она ещё не запущена: 

Код

 HANDLE aMUT = CreateMutexW(NULL,FALSE,L"my_agent");
 if(GetLastError() != ERROR_ALREADY_EXISTS)
    {
    //запускаю агент

    if(ReleaseMutex(aMUT)!=0)
      ShowMessage("Не смог освободить мутекс!");
    WinExec((ExtractFilePath(Application->ExeName)
                        +"agent.exe run_from_client").t_str(),SW_NORMAL);
    }


Перез запуском как видно я высвобождаю "тестирующий" мустекс, но моя дочерняя программа тем не менее не может запуститься так как мутекс уже создан, т.е. ReleaseMutex такое впечателние что не "успевает" сделать своё дело.

Код

// ПРОВЕРКА НА 2ой запуск
    aMUT = CreateMutexW(NULL, FALSE, L"my_agent");
    if (GetLastError() == ERROR_ALREADY_EXISTS) {
      {
         ShowMessage("Уже запущен по мутексу!");
     return;
      }
    }


 

Может я что то не так делаю ((

Автор: borisbn 28.3.2010, 16:04
ReleaseMutex 
Цитата
release its ownership
, а функция CloseHandle закрывает/освобождает mutex
используй CloseHandle

Автор: Sharkfire 28.3.2010, 18:21
Да, спасибо, оно

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)