Re: Как закрыть семафор? | |
---|---|
Каратаев Автор Сообщений: 3978 Откуда: Алматы Дата регистрации: 04.12.2001 |
Цитата:Видимо так и есть Цитата:Чуть подправил - код привожу ниже. В отпуск очень хоцца... Насчет Уфы точно не знаю, но вряд ли... Контора мани не даст, а своих не хватит Цитата:Значит так... это класс... при запуске
И при выходе...
------------------ Никогда не бывает настолько плохо, чтобы не могло быть еще хуже. |
Re: Как закрыть семафор? | |
---|---|
oleg_km Сообщений: 487 Откуда: СПб Дата регистрации: 02.12.2002 |
Должно быть так:
Тогда при открытии приложения создаешь объект класса CEvent с параметром "ИмяТвоегоПриложения". Если объект не создался - уже запущено. При закрытии - удаляешь. Или перетиащи код в свой класс. Использование Event, Mutex, Semaphore в данном случае абсолютно не играет никакой роли. PS. Код приведен не для копирования, а для понимания принципа работы. Нужно правильно обработать ошибки, и вроде как в объявлениях должен быть не INTEGER а LONG Отредактировано (10.02.05 17:26) ------------------ |
Re: Как закрыть семафор? | |
---|---|
Каратаев Автор Сообщений: 3978 Откуда: Алматы Дата регистрации: 04.12.2001 |
oleg_km
Че то он в этом варианте позволяет повторный запуск программы... Отредактировано (11.02.05 10:17) ------------------ Никогда не бывает настолько плохо, чтобы не могло быть еще хуже. |
Re: Как закрыть семафор? | |
---|---|
oleg_km Сообщений: 487 Откуда: СПб Дата регистрации: 02.12.2002 |
Ты именно класс используешь? Переменная с объектом этого класса живет весь период приложения или локальная в ините. Должно быть так:
|
Re: Как закрыть семафор? | |
---|---|
WiRuc Сообщений: 1012 Дата регистрации: 09.04.2002 |
Во-первых, для этих целей лучше использовать mutex.
Во-вторых, неправильно работаете с семафорами. Надо так:
|
Re: Как закрыть семафор? | |
---|---|
Каратаев Автор Сообщений: 3978 Откуда: Алматы Дата регистрации: 04.12.2001 |
Цитата:У меня этот код прописан в моем классе. Я вроде разобрался со всеми моментами - все заработало... единственное, что не смог сделать в этом варианте, так это развернуть первый экземпляр приложения при попытке запустить второй. Сообщение, что типа уже запущено - не очень вдохновляет... а ShowWindow() здесь не проходит, пеотому, что хендл Event-а не соответствует хендлу запущенного приложения. Цитата:Честно говоря, я вообще не понимаю что такое семафор, а что мутекс - делаю вслепую... Если нетрудно, можно доходчиво в пару фраз объяснить различия? И чем лучше Mutex? С семафорами я пробовал - в ехе-шнике все нормально отрабатывает, а вот из под среды фокса нет. Ну... это выше уже было. Правда Ваш вариант еще не пробовал, похоже он будет работать и из под среды. Однако развертывание первого экземпляра приложения в обоих этих вариантах мне кажется проблематичным, если учесть, что заголовок окна может динамически меняться... ------------------ Никогда не бывает настолько плохо, чтобы не могло быть еще хуже. |
Re: Как закрыть семафор? | |
---|---|
piva Сообщений: 18655 Откуда: Курган Дата регистрации: 24.03.2004 |
Саня
Цитата:В том примере как раз все отлицно для меняющегося заголовка - рабочий варинат ------------------ Часто бывает так, что есть над чем задуматься, а нечем. |
Re: Как закрыть семафор? | |
---|---|
JS Сообщений: 12264 Откуда: Эстония Дата регистрации: 04.09.2000 |
Вадим! Еще лучше использовать именованные Mutex' ы
тут описано как - я использую именно их. kodu.neti.ee Отредактировано (11.02.05 14:59) ------------------ Knowledge is better than ignorance! Website: juri.foxhelp.eu |
Re: Как закрыть семафор? | |
---|---|
piva Сообщений: 18655 Откуда: Курган Дата регистрации: 24.03.2004 |
Приблизительно так и сделано - а то я подумал может какой другой есть CreateMutex
------------------ Часто бывает так, что есть над чем задуматься, а нечем. |
Re: Как закрыть семафор? | |
---|---|
oleg_km Сообщений: 487 Откуда: СПб Дата регистрации: 02.12.2002 |
Абсолютно все равно, что использовать - событие, мутант или семафор, т.к. в данном случае используется их общее свойство - диспетчер объектов ядра отслеживает уникальность их имен
По поводу разворачивания. Этот способ (через объекты ядра) не предусматривает получение описателей окон других экземпляров приложения, а именно они нужны для разворачивания предыдущего экземпляра. Это реализуется вариантом с использованием FindWindow, как это было описано выше. |
© 2000-2024 Fox Club  |