anonymous@RULINUX.NET~# Last login: 2024-12-26 10:10:56
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

[Qt]Запрет одновременного запуска нескольких копий приложения

Понадобилось мне реализовать субж. Алгоритм такой:

Во временном каталоге создается файл в который пишется pid процесса получаемый с помощью qApp.applicationPid(); Далее при запуске копии приложения проверяется есть ли в списке процессов процесс с таким-же названием как у запущенного и с pid указанным в файле. Если есть, то выходим из программы. При закрытии программы в closeEvent удаляем созданный файл. Загвоздка собственно вот в чем: как в Qt получить список запущенных процессов? Запускать через QProcess "ps -A|grep"+qApp->applicationFilePath().section("/",-1) не хочется. Да и для винды это не подходит.

Tux-oid(*) (2010-08-06 16:31:00)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.6) Gecko/20100626 SUSE/3.6.6-1.2 Firefox/3.6.6

[Ответить на это сообщение]
avatar
Скрыть

Re: [Qt]Запрет одновременного запуска нескольких копий приложения

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

gnomino(*)(2010-08-06 16:40:02)

(Mudilla/9.0 (XXX; U; *nix i686; ru; rv:1.8.1.11) Gecko/20132528 nonM$OS/5.2.14.11-1.5 Firefox/5.2.14.11)
avatar
Скрыть

Re: [Qt]Запрет одновременного запуска нескольких копий приложения

ещё локальный сокет можно, ИМХО лучше файла по некоторым соображениям

bugmaker(*)(2010-08-06 17:02:15)

Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.9) Gecko/20100407 Ubuntu/9.04 (jaunty) Shiretoko/3.5.9
avatar
Скрыть

Re: [Qt]Запрет одновременного запуска нескольких копий приложения

При запуске приложения создавай именованную область разделяемой памяти с помощью самой кути (  http://doc.trolltech.com/4.5/qsharedmemory.html#create ) и складывай туда ПИД или специфицируй там что-то ещё через что повторно запущенный процесс может интерачить с уже запущенным. Повторно запущенный процесс попытается создать память с тем же именем но обломается и сможет либо просто тупо выругаться и закрыться или там дать знать уже запущенному, что вот пользователь хотел эту программу с такими-то параметрами - это уж как напишешь.

Хотя мне не нравится такой софт, что не даёт себя запустить несколько раз. Ну какое разработчику дело - может у меня 25 аккаунтов в скайпе или ещё какая надобность запускать несколько процессов.

HEBECTb_KTO(*)(2010-08-06 23:40:18)

avatar
Скрыть

Re: [Qt]Запрет одновременного запуска нескольких копий приложения

>Ну какое разработчику дело - может у меня 25 аккаунтов в скайпе или ещё какая надобность запускать несколько процессов.
Галка в настройках решает.

Tux-oid(*)(2010-08-06 23:43:01)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.8) Gecko/20100723 SUSE/3.6.8-0.1.1 Firefox/3.6.8
avatar
Скрыть

Re: [Qt]Запрет одновременного запуска нескольких копий приложения

Тоже вариант

HEBECTb_KTO(*)(2010-08-07 00:05:21)

avatar
Скрыть

Re: [Qt]Запрет одновременного запуска нескольких копий приложения

По-такому принципу реализовано в Eclipse. Так вот иногда при падении нельзя было зайти в программу без ручного удаления этого файла.

Tux-oid(*)(2010-08-09 16:59:27)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.6) Gecko/20100626 SUSE/3.6.6-1.2 Firefox/3.6.6
avatar
Скрыть

Re: [Qt]Запрет одновременного запуска нескольких копий приложения

Ну и нахрена я в плеер потащу еще и QNetwork модуль?

Tux-oid(*)(2010-08-09 17:00:28)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.6) Gecko/20100626 SUSE/3.6.6-1.2 Firefox/3.6.6
avatar
Скрыть

Re: [Qt]Запрет одновременного запуска нескольких копий приложения

Попробую сегодня поковырять. Но про список процессов мне так никто и не ответил.

Tux-oid(*)(2010-08-09 17:05:38)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.6) Gecko/20100626 SUSE/3.6.6-1.2 Firefox/3.6.6
avatar
Скрыть

Re: [Qt]Запрет одновременного запуска нескольких копий приложения

Кстати я нашел решение субжа. Использование QtSingleApplication решает.

 http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Utilities/qtsingleapplication

Tux-oid(*)(2010-08-09 17:09:14)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.6) Gecko/20100626 SUSE/3.6.6-1.2 Firefox/3.6.6
avatar
Скрыть

Re: [Qt]Запрет одновременного запуска нескольких копий приложения

>Так вот иногда при падении нельзя было зайти в программу без ручного удаления этого файла.
Ты невнимательно читаешь, мертвый процесс не может блокировать файл на запись.

gnomino(*)(2010-08-09 17:32:18)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.7) Gecko/20100723 Fedora/3.6.7-1.fc13 Firefox/3.6.7
avatar
Скрыть

Re: [Qt]Запрет одновременного запуска нескольких копий приложения

> Ну и нахрена я в плеер потащу еще и QNetwork модуль?
А через что он станет онлайн радио играть?

bugmaker(*)(2010-08-09 20:20:26)

Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.9) Gecko/20100407 Ubuntu/9.04 (jaunty) Shiretoko/3.5.9
avatar
Скрыть

Re: [Qt]Запрет одновременного запуска нескольких копий приложения

Этим библиотека занимается, а в морде то оно нахрена?

Tux-oid(*)(2010-08-10 07:57:01)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.6) Gecko/20100626 SUSE/3.6.6-1.2 Firefox/3.6.6
avatar
Скрыть

Re: [Qt]Запрет одновременного запуска нескольких копий приложения

Вот для этого. Какая разница, если не эту, так другую либу придётся подключать.

bugmaker(*)(2010-08-10 08:12:46)

Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.9) Gecko/20100407 Ubuntu/9.04 (jaunty) Shiretoko/3.5.9
Этот тред читают 3 пользователя:
Анонимных: 3
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!