Russian Qt Forum
Ноябрь 24, 2024, 17:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Как определить запущено приложение или нет?  (Прочитано 15383 раз)
Hort
Гость
« : Ноябрь 20, 2008, 15:13 »

Как сделать чтобы твое приложение при запуске проверяло - оно уже запущено или нет. И если запущено то передавало переданные аргументы в открытое и зарывалось.
У меня файлы ассоциированы с приложением и хочется, чтобы каждый раз открывалось не новое приложение, а в уже существующем.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Ноябрь 20, 2008, 15:22 »

См:

QtSingleApplication
SingleApplication
DSingleApplication
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #2 : Ноябрь 20, 2008, 19:25 »

Как сделать чтобы твое приложение при запуске проверяло - оно уже запущено или нет. И если запущено то передавало переданные аргументы в открытое и зарывалось.
У меня файлы ассоциированы с приложением и хочется, чтобы каждый раз открывалось не новое приложение, а в уже существующем.

Обычно это делается с помощью IPC, типа DCOP. Но т.к. (в линуксе) нет 100% гарантии того, что запущен хоть какой-то IPC сервис, то самое элементарное что приходит в голову - слушающий TCP сокет.

Up: очевидно что-то типа DSingleApplication как показали.
« Последнее редактирование: Ноябрь 20, 2008, 19:28 от Alex Custov » Записан
ритт
Гость
« Ответ #3 : Ноябрь 24, 2008, 22:41 »

* у DSingleApplication имеется существенный недостаток - работа по tcp/ip. среднестатистической секретутке не объяснишь, что программа не запускается из-за отсутсвия прав на добавления исключения брндмауера...

* SingleApplication в данный момент напроч не поддерживает маковку, т.к. это уё?ище ?уй ложит на стандарты. в будущем планируется как-либо обойти это ограничение + дошлифовать ipc для снижения зависимостей

* QtSingleApplication всем хорош, использует нативные средства комуникации, но распространяется только под коммерческой лицензией
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Ноябрь 25, 2008, 07:14 »

Интересно, а QtCreator какой метод использует? Просто заметил, что при его запуске в тэмповой папке создается файлик singleapplication (что-то типа того). Вот исходники откроют, посмотрим.
ИМХО, под виндой самый нормальный вариант - открыть файлик и держать его, а при втором запуске пытаться удалить. Вот только под Линухой данный вариант никак не катит.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Hort
Гость
« Ответ #5 : Ноябрь 25, 2008, 10:10 »

ИМХО, под виндой самый нормальный вариант - открыть файлик и держать его, а при втором запуске пытаться удалить. Вот только под Линухой данный вариант никак не катит.
а кстате как в qt заблокировать файл и разрешить например только чтение? в php припоминаю функция специальная была а сдесь?
Записан
Pretorean
Гость
« Ответ #6 : Ноябрь 25, 2008, 16:08 »

ИМХО, под виндой самый нормальный вариант - открыть файлик и держать его, а при втором запуске пытаться удалить. Вот только под Линухой данный вариант никак не катит.
а кстате как в qt заблокировать файл и разрешить например только чтение? в php припоминаю функция специальная была а сдесь?
открыть его на запись и не освобождать до завершения приложения ?
Записан
ритт
Гость
« Ответ #7 : Ноябрь 25, 2008, 16:45 »

мужики, вы бредить начинаете. с каких пор создание/открытие файла стало атомарной операцией? подозреваю, что QtCreator использует локалсокет в качестве ipc, но и это не атомарная операция.

повторюсь: идеальный вариант QtSingleApplication, т.к. использует нативные средства под разными платформами (к примеру, под вендой это будет создание атома для экземпляра - атомарная операция), но он коммерческий; SingleApplication использует системный семафор (также атомарная операция) для проверки на запущенный экземпляр + локалсокет для общения (т.к. через семафор общаться, к сожалению, нельзя), но он не работает под маковкой, т.к. дарвинисты упорно игнорят стандарт posix чуть более поздних редакций (примерно 2001 год - сейчас точно не скажу навскидку)

если задача поставлена _только_ как "определить запущено приложение или нет" и не нужно передавать команды запущенному экземпляру, то можно ограничиться системным мутексом. но, как я понял из первого поста, необходимо передавать список файлов для открытия - т.е. команды => ipc
Записан
Грекас
Гость
« Ответ #8 : Ноябрь 28, 2008, 13:00 »

А как сделать так, что б каждый последующий запущенный экземпляр программы проверял, работает ли уже его копия, если работает информировать уже работающую копию программы о том, что ей нужно отобразить себя, если нет - запустить программу.
Записан
Hort
Гость
« Ответ #9 : Ноябрь 28, 2008, 16:26 »

а ктонибуть знает как изменить название класса окна своего приложения? хочу искать запущенное приложение через FindWindow() (функция WinAPI). но чтобы найти надо передать класс окна, а он у всех Qt приложений по умолчанию "QWidget"
« Последнее редактирование: Ноябрь 28, 2008, 16:29 от Hort » Записан
ритт
Гость
« Ответ #10 : Ноябрь 28, 2008, 19:02 »

А как сделать так, что б каждый последующий запущенный экземпляр программы проверял, работает ли уже его копия, если работает информировать уже работающую копию программы о том, что ей нужно отобразить себя, если нет - запустить программу.

смотри примеры в SingleApplication.
вчера пришло в голову как/чем равноценно заменить системный семафор чтобы работало и под маковками тоже - ждите новую версию.
Записан
ритт
Гость
« Ответ #11 : Ноябрь 29, 2008, 08:30 »

так-с, теперь должно и под маковками работать (нужно тестить)...
сегодня-завтра обновлю в "доп.компонентах" и на кутэ-аппзах...хочу ещё пошлифовать немного.
а пока что могу превьюху скинуть, если надо.
Записан
ритт
Гость
« Ответ #12 : Ноябрь 30, 2008, 01:13 »

обновил. http://www.qt-apps.org/content/show.php/SingleApplication?content=81163
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #13 : Январь 20, 2009, 00:27 »

если задача поставлена _только_ как "определить запущено приложение или нет" и не нужно передавать команды запущенному экземпляру, то можно ограничиться системным мутексом.

А можно поинтересоваться, что имеется в виду под системным мутексом? У меня именно стоит задача просто определить, запущено приложение ии нет.
Записан

Собираю информацию по крупицам
http://webhamster.ru
ритт
Гость
« Ответ #14 : Январь 20, 2009, 05:05 »

поскольку маковка игнорит общепринятые стандарты, использовать QSystemSemaphore в качестве атома под разными платформами не получилось (версии SA < 1.0). в версии 1.0 используется QSharedMemory - для лока достаточно, а вот для ipc - уже нет Грустный
посмотри в последней версии SA (кажется, isRunning())
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.165 секунд. Запросов: 23.