Russian Qt Forum
Ноябрь 24, 2024, 17:53
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Как определить запущено приложение или нет?
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Как определить запущено приложение или нет? (Прочитано 15388 раз)
Hort
Гость
Как определить запущено приложение или нет?
«
:
Ноябрь 20, 2008, 15:13 »
Как сделать чтобы твое приложение при запуске проверяло - оно уже запущено или нет. И если запущено то передавало переданные аргументы в открытое и зарывалось.
У меня файлы ассоциированы с приложением и хочется, чтобы каждый раз открывалось не новое приложение, а в уже существующем.
Записан
pastor
Administrator
Джедай : наставник для всех
Offline
Сообщений: 2901
Re: Как определить запущено приложение или нет?
«
Ответ #1 :
Ноябрь 20, 2008, 15:22 »
См:
QtSingleApplication
SingleApplication
DSingleApplication
Записан
Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: Как определить запущено приложение или нет?
«
Ответ #2 :
Ноябрь 20, 2008, 19:25 »
Цитата: Hort от Ноябрь 20, 2008, 15:13
Как сделать чтобы твое приложение при запуске проверяло - оно уже запущено или нет. И если запущено то передавало переданные аргументы в открытое и зарывалось.
У меня файлы ассоциированы с приложением и хочется, чтобы каждый раз открывалось не новое приложение, а в уже существующем.
Обычно это делается с помощью IPC, типа DCOP. Но т.к. (в линуксе) нет 100% гарантии того, что запущен хоть какой-то IPC сервис, то самое элементарное что приходит в голову - слушающий TCP сокет.
Up
: очевидно что-то типа DSingleApplication как показали.
«
Последнее редактирование: Ноябрь 20, 2008, 19:28 от Alex Custov
»
Записан
ритт
Гость
Re: Как определить запущено приложение или нет?
«
Ответ #3 :
Ноябрь 24, 2008, 22:41 »
* у DSingleApplication имеется существенный недостаток - работа по tcp/ip. среднестатистической секретутке не объяснишь, что программа не запускается из-за отсутсвия прав на добавления исключения брндмауера...
* SingleApplication в данный момент напроч не поддерживает маковку, т.к. это уё?ище ?уй ложит на стандарты. в будущем планируется как-либо обойти это ограничение + дошлифовать ipc для снижения зависимостей
* QtSingleApplication всем хорош, использует нативные средства комуникации, но распространяется только под коммерческой лицензией
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Как определить запущено приложение или нет?
«
Ответ #4 :
Ноябрь 25, 2008, 07:14 »
Интересно, а QtCreator какой метод использует? Просто заметил, что при его запуске в тэмповой папке создается файлик singleapplication (что-то типа того). Вот исходники откроют, посмотрим.
ИМХО, под виндой самый нормальный вариант - открыть файлик и держать его, а при втором запуске пытаться удалить. Вот только под Линухой данный вариант никак не катит.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Hort
Гость
Re: Как определить запущено приложение или нет?
«
Ответ #5 :
Ноябрь 25, 2008, 10:10 »
Цитата: panter_dsd от Ноябрь 25, 2008, 07:14
ИМХО, под виндой самый нормальный вариант - открыть файлик и держать его, а при втором запуске пытаться удалить. Вот только под Линухой данный вариант никак не катит.
а кстате как в qt заблокировать файл и разрешить например только чтение? в php припоминаю функция специальная была а сдесь?
Записан
Pretorean
Гость
Re: Как определить запущено приложение или нет?
«
Ответ #6 :
Ноябрь 25, 2008, 16:08 »
Цитата: Hort от Ноябрь 25, 2008, 10:10
Цитата: panter_dsd от Ноябрь 25, 2008, 07:14
ИМХО, под виндой самый нормальный вариант - открыть файлик и держать его, а при втором запуске пытаться удалить. Вот только под Линухой данный вариант никак не катит.
а кстате как в qt заблокировать файл и разрешить например только чтение? в php припоминаю функция специальная была а сдесь?
открыть его на запись и не освобождать до завершения приложения ?
Записан
ритт
Гость
Re: Как определить запущено приложение или нет?
«
Ответ #7 :
Ноябрь 25, 2008, 16:45 »
мужики, вы бредить начинаете. с каких пор создание/открытие файла стало атомарной операцией? подозреваю, что QtCreator использует локалсокет в качестве ipc, но и это не атомарная операция.
повторюсь: идеальный вариант QtSingleApplication, т.к. использует нативные средства под разными платформами (к примеру, под вендой это будет создание атома для экземпляра - атомарная операция), но он коммерческий; SingleApplication использует системный семафор (также атомарная операция) для проверки на запущенный экземпляр + локалсокет для общения (т.к. через семафор общаться, к сожалению, нельзя), но он не работает под маковкой, т.к. дарвинисты упорно игнорят стандарт posix чуть более поздних редакций (примерно 2001 год - сейчас точно не скажу навскидку)
если задача поставлена _только_ как "определить запущено приложение или нет" и не нужно передавать команды запущенному экземпляру, то можно ограничиться системным мутексом. но, как я понял из первого поста, необходимо передавать список файлов для открытия - т.е. команды => ipc
Записан
Грекас
Гость
Re: Как определить запущено приложение или нет?
«
Ответ #8 :
Ноябрь 28, 2008, 13:00 »
А как сделать так, что б каждый последующий запущенный экземпляр программы проверял, работает ли уже его копия, если работает информировать уже работающую копию программы о том, что ей нужно отобразить себя, если нет - запустить программу.
Записан
Hort
Гость
Re: Как определить запущено приложение или нет?
«
Ответ #9 :
Ноябрь 28, 2008, 16:26 »
а ктонибуть знает как изменить название класса окна своего приложения? хочу искать запущенное приложение через FindWindow() (функция WinAPI). но чтобы найти надо передать класс окна, а он у всех Qt приложений по умолчанию "QWidget"
«
Последнее редактирование: Ноябрь 28, 2008, 16:29 от Hort
»
Записан
ритт
Гость
Re: Как определить запущено приложение или нет?
«
Ответ #10 :
Ноябрь 28, 2008, 19:02 »
Цитата: Грекас от Ноябрь 28, 2008, 13:00
А как сделать так, что б каждый последующий запущенный экземпляр программы проверял, работает ли уже его копия, если работает информировать уже работающую копию программы о том, что ей нужно отобразить себя, если нет - запустить программу.
смотри примеры в SingleApplication.
вчера пришло в голову как/чем равноценно заменить системный семафор чтобы работало и под маковками тоже - ждите новую версию.
Записан
ритт
Гость
Re: Как определить запущено приложение или нет?
«
Ответ #11 :
Ноябрь 29, 2008, 08:30 »
так-с, теперь должно и под маковками работать (нужно тестить)...
сегодня-завтра обновлю в "доп.компонентах" и на кутэ-аппзах...хочу ещё пошлифовать немного.
а пока что могу превьюху скинуть, если надо.
Записан
ритт
Гость
Re: Как определить запущено приложение или нет?
«
Ответ #12 :
Ноябрь 30, 2008, 01:13 »
обновил.
http://www.qt-apps.org/content/show.php/SingleApplication?content=81163
Записан
xintrea
Супер активный житель
Offline
Сообщений: 754
Re: Как определить запущено приложение или нет?
«
Ответ #13 :
Январь 20, 2009, 00:27 »
Цитата: Константин от Ноябрь 25, 2008, 16:45
если задача поставлена _только_ как "определить запущено приложение или нет" и не нужно передавать команды запущенному экземпляру, то можно ограничиться системным мутексом.
А можно поинтересоваться, что имеется в виду под системным мутексом? У меня именно стоит задача просто определить, запущено приложение ии нет.
Записан
Собираю информацию по крупицам
http://webhamster.ru
ритт
Гость
Re: Как определить запущено приложение или нет?
«
Ответ #14 :
Январь 20, 2009, 05:05 »
поскольку маковка игнорит общепринятые стандарты, использовать QSystemSemaphore в качестве атома под разными платформами не получилось (версии SA < 1.0). в версии 1.0 используется QSharedMemory - для лока достаточно, а вот для ipc - уже нет
посмотри в последней версии SA (кажется, isRunning())
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...