![]() |
|
![]() ![]() ![]() |
|
ViLena |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 23.10.2008 Репутация: нет Всего: нет |
Помогите, кто знает, как мне сделать запрет запуска двух экземпляров одной программы в QT3(Linux).
Когда вызываешь одну программу из другой, то можно использовать Mutexы, так я делала в Visual Studio ( Windows ). А если просто запретить двойной вызов программы, то как это сделать в QT3 и под Linux? ![]() |
|||
|
||||
Elfebet |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 545 Регистрация: 15.5.2006 Где: Украина. Запорожь е. Репутация: 5 Всего: 14 |
ну в QT тоже есть мьютексы - QMutex
-------------------- Программист не должен всё знать... он должен знать где можно посмотреть |
|||
|
||||
ViLena |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 23.10.2008 Репутация: нет Всего: нет |
я знаю, я же говорю, что понимаю как отследить запуск копий программ при вызове одной из другой, а если просто в среде я вызываю программу, работаю с ней, а потом еще раз вызываю эту же программу, как этого не допустить? может в примере кто объяснит
![]() |
|||
|
||||
Elfebet |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 545 Регистрация: 15.5.2006 Где: Украина. Запорожь е. Репутация: 5 Всего: 14 |
в какой среде? каким способом Вы ее запускаете? через QProcess?
-------------------- Программист не должен всё знать... он должен знать где можно посмотреть |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Я нашел такие методы:
- проверка PID, Lockfile's - проверка открытого специфического порта на локалхосте - использование QSharedMemory со своими подводными камнями Возможно как-то еще можно использовать QSessionManager. При выходе из программы QSessionManager сохраняет id сессии и восстанавливает тот же номер при запуске. Если кто-то начал сессию, а потом запустилась вторая копия программы, то номера сессий уже не будут совпадать. |
|||
|
||||
Elfebet |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 545 Регистрация: 15.5.2006 Где: Украина. Запорожь е. Репутация: 5 Всего: 14 |
если я правильно понял то Вам нужно отследить состояние программы, запускаете ее через QProcess
в этом классе есть такие методы как waitForFinished - ждать пока программа завершит свою работу state - определяет статус программы - не запущена, запускается, запущена и еще много чего вкусного но это в Qt 4.3 есть, я не знаю как обстоят дела в Qt3 ![]() -------------------- Программист не должен всё знать... он должен знать где можно посмотреть |
|||
|
||||
ViLena |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 23.10.2008 Репутация: нет Всего: нет |
на данный момент мой main файл выглядит таким образом
просто из main я вызываю диалог, какой кусок этого кода мне нужно запустить как процесс, чтоб потом использовать те функции, о которых вы говорили ( waitForFinished ) и не приведет ли это к тому, что я смогу отследить именно в этом maine, что нельзя запускать еще один диалог MainDlgImpl, но ведь это не дает уверенности, что из среды( Linux) я не смогу запустить еще один процесс main. A мне как раз и нужно. чтоб на определенный момент времени в среде работал только один такой процесс main |
|||
|
||||
Elfebet |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 545 Регистрация: 15.5.2006 Где: Украина. Запорожь е. Репутация: 5 Всего: 14 |
так всетаки что это за среда? среда - это та программа которую вы пишите или что?
я думал в этой среде написать
но теперь понял что Вам не то нужно ![]() Это сообщение отредактировал(а) Elfebet - 4.12.2008, 13:03 -------------------- Программист не должен всё знать... он должен знать где можно посмотреть |
|||
|
||||
Elfebet |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 545 Регистрация: 15.5.2006 Где: Украина. Запорожь е. Репутация: 5 Всего: 14 |
Вот тут есть тут хорошее описание по русски про QSessionManager, как раз то что тебе нада
-------------------- Программист не должен всё знать... он должен знать где можно посмотреть |
|||
|
||||
ViLena |
|
||||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 23.10.2008 Репутация: нет Всего: нет |
простите, может я неправильно выразилась, но под средой я имела в виду операционную систему, ну или в частном случае менеджер сеансов X11.
я прочитала эту статью, очень симпатичная штучка ![]() ![]() но может есть более интересные решения ![]() Это сообщение отредактировал(а) ViLena - 4.12.2008, 14:45 |
||||
|
|||||
Acer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 5.9.2007 Где: UA::DN Репутация: 15 Всего: 8 |
Если я правильно понял, то можно попробовать сделать как в Eclipse... файлик .lock
При запуске приложения, если файл уже используется, то Error и Terminate, иначе открываем файл и блокируем его до завершения работы. Добавлено через 2 минуты и 3 секунды
Лучше не записывать в файл. Так как его можно отредактировать... |
|||
|
||||
ViLena |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 23.10.2008 Репутация: нет Всего: нет |
вообщем, пока я сделала так
в принципе работает, но мне как - то не по душе, может будут еще варианты ![]() вот подумалось, если вдруг программа завершится некорректно, то не сможет подчистить за собой файл и уже в следующий раз для ее запуска прийдется этот файл удалять ручками, плохо это ![]() Это сообщение отредактировал(а) ViLena - 4.12.2008, 17:52 |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
||||
|
||||
Acer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 5.9.2007 Где: UA::DN Репутация: 15 Всего: 8 |
Вариант с файликом.. CRT, STL
Если файлик используется и его нельзя удалить, значит приложение не запускается... Вот только не знаю, как сделать так, чтобы файл нельзя было открывать и записывать туда что-либо во время работы программы. |
|||
|
||||
Elfebet |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 545 Регистрация: 15.5.2006 Где: Украина. Запорожь е. Репутация: 5 Всего: 14 |
кроме как QSessionManager, инного способа видимо нет
ну есть еще платформенно зависимый способ, ![]() -------------------- Программист не должен всё знать... он должен знать где можно посмотреть |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |