![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 2 Всего: 33 |
Нужно определить запущена ли программа дважды. Если один экземпляр уже запущен, убить, и запуститься.
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
||||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 8 Всего: 154 |
именованый мюьтекс |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
примерно так
Добавлено @ 10:51 ну да, я это в примере показал ![]() Это сообщение отредактировал(а) azesmcar - 18.5.2009, 11:05 |
|||
|
||||
Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: нет Всего: 7 |
Проблема достаточно древняя. Видел отличный, подробнейший разбор методов, с анализом недостатков каждого. Даавно. Понравился.
![]() Может быть, и не здесь, но на похожем форуме.. ;-) Поиск рулит. ![]() Во, кажется нашел. Как избежать запуска нескольких экземпляров приложения (by Dr. Joseph M. Newcomer). И вот про сессии юзеров наглядно. Это сообщение отредактировал(а) Mechanic - 18.5.2009, 11:11 --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 2 Всего: 33 |
Ну допустим мьютекс существует, как мне убить тот экземпляр который был запущен ранее.
А при завершении программы мьютекс уничтожается? -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
andrew_121
|
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 5 Всего: 64 |
Если надо убивать уже запущенную прогу, а не ту которая только запустилась, придётся юзать сообщения, чтобы уже запущенная себя убила ![]() Это сообщение отредактировал(а) artsb - 18.5.2009, 11:23 -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 2 Всего: 33 |
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
||||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 2 Всего: 33 |
azesmcar, Ща попробую.
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: нет Всего: 7 |
Скорее всего. Вот только сообщения в кого? Нужно при запуске где-то сохранять или Window.Handle для сообщения, или же ProcessHandle for TerminateProcess. Может быть "атомные" технологии помогут? Хотя, если есть окно - то совсем просто найдется всё, что имеет нужные окна. Окна-то есть? ![]() --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
GremlinProg |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
WM_QUIT конечно поможет, если перед закрытием не потребуется участие пользователя при сохранении каких-либо данных
а так - можно создать то же именованое автоматически-сбрасываемое событие и тестировать его в главном цикле сообщений на предмет автоматического сохранения всех данных и завершения приложения, типа такого:
или отдельным потоком аналогично слушать hAbortEvent, так будет немного экономнее, только PostQuitMessage придется заменить на нечто вроде такого: Добавлено через 4 минуты и 22 секунды тогда и окно искать не потребуется:
ps: код azesmcar -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 5 Всего: 64 |
andrew_121, пример в атаче (BCB 6). Возможно, немного коряво
![]() Такой вариант можешь юзать, если необходимо корректно закрыть прогу, т.е. сохранить какие-то данные и т.п. Иначе просто шли WM_QUIT и не обрабатывай своё сообщение. ![]() Присоединённый файл ( Кол-во скачиваний: 4 ) ![]() -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 5 Всего: 50 |
|
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 5 Всего: 64 |
Alca, надо не себя закрыть, а прогу, которая до этого работала
![]() -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 5 Всего: 50 |
Значит плохо прочитал топик.
![]() |
|||
|
||||
korbian |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 336 Регистрация: 20.2.2007 Где: Penza Репутация: 9 Всего: 14 |
GremlinProg, можно одним эвентом обойтись.
псевдокод
а после диспатча или в выделенном потоке ваш код с ожиданием события! -------------------- korbian © |
|||
|
||||
GremlinProg |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
korbian, можно, а почему без автомата? это же риск просто не закрыть окно
можно подстраховаться и использовать два события, из которых второй, фидбэк - неавтомат:
а в закрывающемся процессе вызвать PulseEvent для hFeedback Добавлено через 13 минут и 25 секунд
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||||
|
|||||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
а еще лучше использовать для сигнализации семафор, а не событие, тогда три и более подряд открытых окон разберутся между собой правильно
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
korbian |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 336 Регистрация: 20.2.2007 Где: Penza Репутация: 9 Всего: 14 |
GremlinProg, соглашусь, что ошибался.
![]() Проскользнула идея запользовать тотже евент для фидбэка, но похоже без двух объектов синхронизации действительно не обойтись. -------------------- korbian © |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
создать shared секцию, и хранить в ней флаги, хендлы и т.п.
или FileMapping, но секция лучше, т.к. файл один |
|||
|
||||
korbian |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 336 Регистрация: 20.2.2007 Где: Penza Репутация: 9 Всего: 14 |
GoldFinch, все равно без синхронизации обращения к общей секции или filemapping не обойтись, а значит мьютексы, эвенты или семафоры.
-------------------- korbian © |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
korbian, в большинстве случаев, достаточно volatile флагов
|
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
не надо мешать огурцы с утюгами для двух разных процессов volatile ни чего не решает, как и взаимоблокировки тут в любом случае нужны объекты ядра, korbian верно говорит -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
GremlinProg, все же тема не о тех случаях когда нужна синхронизация
|
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
для примера: создай общую секцию с одной переменной типа int запусти 100-200 процессов, которые будут инкрементировать эту переменную и выводить окно со своим номером, если счетчик дощел до пика (для 100 - 100, для 200 - 200) в идеале, на одну серию запусков, всегда должно выводиться окно, но при наложении запусков, этого просто не будет, счетчик не будет доходить до пика (наложение можно имитировать вставкой Sleep между чтением и записью в секцию) так что без синхронизации, секции особого смысла не имеют, с меппингом - аналогично -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |