Russian Qt Forum
Июль 03, 2024, 08:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Обойтись без QtSingleApplication + Вопрос про QProcess  (Прочитано 6516 раз)
interv
Гость
« : Январь 26, 2012, 15:08 »

1. Как обойтись без QtSingleApplication, т.е. игнорировать второй запуск программы. т.к. он зачемто использует QNetwork.
2. Как запустить QProcess, и чтобы он не убивал его при закрытии приложения, QProcess::startDetached не подходит, т.к. надо запоминать запущенные процессы.
Записан
interv
Гость
« Ответ #1 : Январь 27, 2012, 13:24 »

1. Решение
Код
C
...
#include <windows.h>
...
 
int main(int argc, char *argv[])
{
 QApplication a(argc, argv);
 QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
 QString uniqueNameMutex("--==##UNIQUE-MUTEX##==--");
 HANDLE mut = CreateMutex(0, false, uniqueNameMutex.toStdWString().c_str());
 DWORD lastError = GetLastError();
 if ((mut==0) || (lastError == ERROR_ALREADY_EXISTS))
 {
   QMessageBox msgBox;
   msgBox.setText(QObject::tr("Program already run."));
   msgBox.setStandardButtons(QMessageBox::Ok);
   msgBox.setDefaultButton(QMessageBox::Ok);
   msgBox.show();
   return a.exec();
 }
 Widget w;
 w.hide();
 return a.exec();
}
2. Вопрос еще актуален.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


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

1. А как же другие платформы? Подмигивающий
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
interv
Гость
« Ответ #3 : Январь 27, 2012, 13:47 »

Эх дурья моя бошка! Условие - платформа Windows.
Записан
KrupaKarlo
Гость
« Ответ #4 : Январь 27, 2012, 14:31 »

Самый простой вариант: закрепляешь за программой определенный порт. При запуске биндишь его. Если программа запускается она пытается этот порт забиндить. Если он уже занят, то уже есть запущенная программа Вот и все
« Последнее редактирование: Январь 27, 2012, 14:33 от KrupaKarlo » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Январь 27, 2012, 14:31 »

Эх дурья моя бошка! Условие - платформа Windows.
Неясно зачем обходиться, в нативняке там совсем несладко
http://www.prog.org.ru/index.php?topic=11139.msg68219#msg68219
Пользуйтесь поиском
Записан
interv
Гость
« Ответ #6 : Январь 30, 2012, 09:25 »

Всем спасибо, а что с QProcess посоветуете, мне просто надо знать какие прилаги я запустил и еще пока не закрыл.
Но вот в чем проблемма при закрытии моего приложения оно убивает все процессы которые запустило...
Записан
KrupaKarlo
Гость
« Ответ #7 : Январь 30, 2012, 11:14 »

Возможно дело в том, что когда вызывается деструктор QProcess он грохает прилагу. И если ты в конструкторе QProcess указал this или вообще парента то QProcess удалится. Надо создавать его без парента.
Записан
interv
Гость
« Ответ #8 : Январь 30, 2012, 12:14 »

Действительно!
Решение:
Код
C
 QProcess *process = new QProcess(0);
 process->start(exePath, QIODevice::ReadOnly);
 connect(process, SIGNAL(finished(int)), process, SLOT(deleteLater()));
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #9 : Январь 30, 2012, 14:44 »

Как вариант QSharedMemory с его локом.
Ну или QLockedFile.
Но если действительно нужна только винда, то наверно проще писать на дот нэте использовать системный мьютекс.
Записан
KrupaKarlo
Гость
« Ответ #10 : Январь 30, 2012, 15:05 »

Новичкам свойственно ошибаться  Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Январь 30, 2012, 15:34 »

Новичкам свойственно ошибаться  Улыбающийся
Но, увы, это проходит  Плачущий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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