Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перезапуск программы 
:(
    Опции темы
gordmiand
Дата 25.11.2013, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



подскажите пож-та может ли программа перезагрузить саму себя? дайте наиболее простой пример на это...
PM MAIL   Вверх
bsa
Дата 25.11.2013, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Если этот код поместить в main, то программа будет себя перезапускать:
Код
pid_t pid = fork();
if (pid == 0)
   execv(argv[0], argv);
else
   exit((pid > 0) ? 0 : 1);
Делать без дополнительных проверок и ограничений не рекомендую, так как убить ее будет очень сложно.

Тоже самое можно сделать средствами Qt. См. http://qt-project.org/doc/qt-5.0/qtcore/qprocess.html
PM   Вверх
gordmiand
Дата 26.11.2013, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



bsa: а как это сделать с использованием QProcess-a?

PM MAIL   Вверх
bsa
Дата 26.11.2013, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Код
if (QProcess::startDetached(QCoreApplication::applicationFilePath(), QCoreApplication::arguments()))
    exit(0);

PM   Вверх
gordmiand
Дата 27.11.2013, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



bsa: команда
Код

if (QProcess::startDetached(QCoreApplication::applicationFilePath(), QCoreApplication::arguments()))
    exit(0);

не дает полной перезагрузки программы - например ее конструктор не вызывается заново, а лишь мигает (перезапускается) форма приложения...мне же надо сделать полноценный перезапуск программы - как будто ее закрыли и сразу же заново запустили...
PM MAIL   Вверх
vinter
Дата 27.11.2013, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 3
Всего: 56



gordmiand, не знаю, что у тебя там мигает, но exit(0) убивает программу. Не форму\окно\виджет, а программу.


--------------------
Мой блог
PM MAIL WWW   Вверх
gordmiand
Дата 27.11.2013, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



vinter : а Вы поставьте какой-нибудь принт, например, в конструкторе программы и посмотрите после выполнения вышеуказанного кода (выполняющегося например по онклику кнопки) запустится ли заново конструктор (т.е. будет ли еще раз принт)...
PM MAIL   Вверх
vinter
Дата 27.11.2013, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 3
Всего: 56



gordmiand, я знаю, что делает exit(), поэтому проверять там нечего. Кстати, что ты имеешь ввиду под "конструктором программы"? Такого понятия не существует. В целом, проблема где-то у тебя в коде. Нужно больше информации. 


--------------------
Мой блог
PM MAIL WWW   Вверх
gordmiand
Дата 27.11.2013, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



под конструктором программы я имел ввиду конструктор MainWindow, который и не перезапускается после выполнения вышеуказанного кода, а должна быть полная аналогия только что запущенной программы...

Добавлено через 6 минут и 28 секунд
exit(0); срабатывает только один раз, а мне надо, чтобы программа перезапускалась бы при каждом онклике какой-то кнопки...
PM MAIL   Вверх
bsa
Дата 29.11.2013, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



gordmiand, exit(0) завершает текущую программу (и без вариантов). Если до него не доходит, то надо разбираться, почему QProcess не смог выполнить запуск. Но это другая задача.
PM   Вверх
gordmiand
Дата 29.11.2013, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



bsa: вот что я делаю: создал новыое gui-приложение, в конструкторе MainWindow написал принт
Код

qDebug() << "starting programm";
 
сделал онклик кнопки
Код

 if (QProcess::startDetached(QCoreApplication::applicationFilePath(), QCoreApplication::arguments()))
 {
  qDebug() << "exiting programm";
  exit(0);
 }

В итоге после первого запуска программы печатается принт из конструктора (что естественно верно), а после онклика - его принт и выполняется exit(0)...при повторных нажатиях на эту "перезагрузочную" кнопку ничего не происходит - нет ни его принта, ни exit-a, ни принта конструктора приложения (а должен бы быть)  - мне же надо перезагружаться по каждому онклику...
PM MAIL   Вверх
bsa
Дата 3.12.2013, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



gordmiand, может просто программа отцепляется от консоли? попробуй передавать программе счетчик в качестве параметра. Или отображай на форме время запуска. Думаю, ты заметишь, что программа перезапускается.
PM   Вверх
gordmiand
Дата 3.12.2013, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



bsa: я не спорю, может таким способом программа и "перезапускается", но не так, как мне надо - мне надо сделать полный перезапуск программы - с запуском конструктора mainwindow и т.д., т.е. чтобы выполнялись бы все методы, что и при первом запуске программы...
PM MAIL   Вверх
bsa
Дата 4.12.2013, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



gordmiand, сделай то, что я тебе сказал. Не пытайся придумывать свои теории. Перезапуск программы бывает только одного вида - полный.
PM   Вверх
gordmiand
Дата 4.12.2013, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



bsa: тогда, пожалуйста, объясните что происходит при повторном онклике на кнопке - код онклика не выполняется (ставил там принт), но форма мигает (типа закрывается и открывается вновь)?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0533 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.