Семафоры и кол-во запусков

Тема в разделе "Свободное общение", создана пользователем qqwertty, 5 июн 2010.

  1. qqwertty

    qqwertty Гость

    Сорри, мысль не уловил.
    Попытаюсь подробнее объяснить. Мне нужно чтобы программа запускалась только определенное количество раз, например 3. Но мне также нужно чтобы при запуске программы в 4-ый раз, она запускалась, если в памяти висит только 2 программы или меньше.
    Причем, не важно как предыдущие копии были завершены, корректно или нет.
    В предлагаемой схеме с файлом и т.п. нет возможности отследить, когда программа завершается некорректно, чтобы сбросить число на единицу.
    Про семафор я читал, пытался юзать CreateSemaphore и ReleaseSemaphore, не получилось
     
  2. qqwertty

    qqwertty Гость

    INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR szCmdLine, INT nCmdShow)
    {
    HANDLE hShared = CreateSemaphore(NULL, 0,3, "Test");
    MessageBox(0,AnsiString(ReleaseSemaphore(hShared,1,NULL)).c_str(),"",MB_OK);
    MSG msg;
    RegisterHotKey(NULL, ID_SHUTDOWN_HOTKEY, MOD_ALT, VK_ESCAPE);
    while(1)
    {
    if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
    if(msg.message == WM_HOTKEY) {
    if( msg.wParam == ID_SHUTDOWN_HOTKEY ) {
    CloseHandle(hShared);
    return 0;
    }
    }
    }
    }
    }
    Первые три запуска ReleaseSemaphore возвращает 1, при 4-ом 0, завершаем программы, оставляя 1-ну. Запускаем, все-равно 0.
     
Загрузка...

Поделиться этой страницей