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

  • Автор темы qqwertty
  • Дата начала
Q

qqwertty

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

qqwertty

#2
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.