![]() |
|
|
![]()
|
|
| Bekass |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 21.12.2005 Репутация: нет Всего: нет |
Есть прога, ее нельзя запускать еще раз (то есть более 1 одновременно)
Подскажете, как можно определить, запушенна ли програма, что б не запускать ее снова !!! |
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 4 Всего: 44 |
можно использовать
FindWindow |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
1) Именованная секция памяти: поместить туда статическую переменную, инициализированную 0. При загрузке проверять, если 0, ставить 1, иначе уже используется - выход.
2) Именованный объект синхронизации, скажем, мьютекс. Все то же самое. -------------------- ... |
|||
|
||||
| chaos |
|
||||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 4 Всего: 44 |
вот тебе заготовки
1
2 про то что говорил Earnest
че не понятно спрашивай |
||||
|
|||||
| SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 5 Всего: 124 |
Мутекс надёжнее
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
-------------------- ... |
|||
|
||||
| maq |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 28.10.2005 Репутация: нет Всего: нет |
Microsoft тоже рекомендует Мутекс:
http://support.microsoft.com/default.aspx?...kb;en-us;106385 Но вот код
у меня не сработал. Дает ошибку. Может я его не туда включил? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Хм? Какую ошибку?
В моем приложении, такой же код, только вместо переменной g_lApp- массив:
... работает... уже несколько лет... под MSVC7.1 в том числе... -------------------- ... |
|||
|
||||
| AlexPro |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 9.11.2005 Где: Санкт-Петербург Репутация: 3 Всего: 4 |
Видимо, FindWindow. Вот что пишет по этому поводу авторитетный товарищ Dr. Joseph M. Newcomer:
Целиком статью можно прочесть здесь. Рекомендую: интересно и поучительно. Это сообщение отредактировал(а) AlexPro - 21.1.2006, 07:34 |
|||
|
||||
| maq |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 28.10.2005 Репутация: нет Всего: нет |
У меня VS .NET 2005.
Разместил код (как есть)
в CWinApp.cpp перед всеми
все нормально компилируется, но можно запустить бесконечное количество программ! Что я не так сделал? |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
AlexPro
Действительно, интересная статья. А проверять переменную при запуске и ставить ее в 1 ты не забываешь? Кроме того, хороший тон требует, чтобы вместо повторного запуска происходило "всплытие" уже запущенного экземпляра и передача ему параметров нового запуска (открываемого файла, например), для чего тоже нужны дополнительные действия в InitInstance. Кстати в приведенной AlexPro статье об этом тоже написано. Да согласна, вариант с мьютексом надежнее в том плане, что он переносим: все прагмы зависят от компилятора. Однако, вариант с именованной секцией имеет и свои плюсы: в эту разделяемую переменную можно поместить хандл главного окна запущенного приложения, и не парится потом с поиском - например. А также другую информацию ... Что касается переносимости, то в большинстве компиляторов именованные секции поддерживаются тем или иным способом, т.е. при необходимости портировать вполне можно. Есть и еще один плюс. Очень многие программисты, начинающие свое обучение сразу с высокоуровневых языков и привыкщие думать только в категориях объектов, в жизни не слыхали об именованных секциях и прочих премудростях линкера. Так что это еще и способ разобраться с более низкоуровневыми понятиями. Зачем нужно знать, о том, что ниже, замечательно написано здесь. -------------------- ... |
|||
|
||||
| maq |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 28.10.2005 Репутация: нет Всего: нет |
Спасибо, Earnest! Но я честно не разобрался!
Добавил такой код, естественно неправильный.
как он правильно должен выглядеть? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Конечно, прагмы и секции должны быть вне функций, а код проверки, разумеется, в InitInstance.
То, что ты написал, компилятор должен послать. А более подробно - почитай внимательно статью, которую привел в этой теме AlexPro. Там и пример есть с разделяемой переменной. Кстати, по внимательном прочтении статьи, должна признать, только код с мьютексом обеспечивает полную надежность в смысле "Race Conditions". Трюк с секцией работает, но не тогда, когда пользователь долбит по кнопке запуска со скоростью хорошей машинистки. Но, в сочетании с мьютексом, разделяемая переменная позволяет отказаться от поиска окна и прочего шаманства. -------------------- ... |
|||
|
||||
| AlexPro |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 9.11.2005 Где: Санкт-Петербург Репутация: 3 Всего: 4 |
||||
|
||||
| takedo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: нет Всего: 3 |
AlexPro я про то же самое спрашивал, о чем и вы здесь говорите. По поводу Мьютекса - А КАК ТЫ ПОСЛЕ ТОГО КАК НАЙДЁШЬ МЬЮТЕКС ПЕРЕВЕДЕШБ НА ПЕРЕДНИЙ ПЛАН РАЗВЕРНУТОЕ ТО САМОЕ ПРИЛОЖЕНИЕ? Я отказался от мьютекса и сделал через посылку глобального сообщения... Может поделишься как ты по мьютексу определяешь хендл окна?
-------------------- я не гольфист - я хоккеист |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |