1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

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

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

  1. qqwertty

    qqwertty Гость

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

    qqwertty Гость

    Репутация:
    0
    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.
     
Загрузка...

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