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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Действие по выходу из консольного приложения  (Прочитано 5606 раз)
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« : Октябрь 26, 2016, 12:41 »

Здравствуйте
У меня есть консольное приложение QCoreApplication, которое я запускаю под QNX (возможно это не имеет значения). Мне необходимо выполнить некоторые действия перед выходом из приложения (сейчас я выхожу из него по нажатию CTRL + C). Можете подсказать как это сделать?
По сигналу aboutToQuit() у меня не получилось. Возможно, проще сделать выход по нажатию другой кнопки...
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Октябрь 26, 2016, 12:49 »

std::atexit не пробовали?
Записан
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« Ответ #2 : Октябрь 26, 2016, 13:39 »

C QCoreApplication не получается, но может делаю не так.
#include<QCoreApplication>
#include<QDebug>
#include<cstdlib>
#include<cstdio>

void print(){
qDebug()<<"eee";
}

int main(int argc, char *argv[]){
QCoreApplication a(argc,argv);
atexit(print);
return a.exit();
}
Записан
Bepec
Гость
« Ответ #3 : Октябрь 26, 2016, 13:46 »

Видимо не так...
Потому что цикл событий запускать надо, а это exec().

Сделайте так.
Код:
int code = a.exec();
SomeFunction();
return code;
Записан
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« Ответ #4 : Октябрь 26, 2016, 13:52 »

Сейчас пробую в Windows
int code = a.exec();
atexit(print);
return code;

Не вылетает, но и в консоль ничего не выводит по закрытию окна
Записан
Bepec
Гость
« Ответ #5 : Октябрь 26, 2016, 13:55 »

Без кода можно сказать только "А хз".
Записан
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« Ответ #6 : Октябрь 26, 2016, 14:08 »

#include <QCoreApplication>
#include<QDebug>
#include<cstdlib>
#include<cstdio>

void print(){
    qDebug()<<"ttt";
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    int code = a.exec();
    atexit(print);
    return code;
}
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #7 : Октябрь 26, 2016, 14:20 »

Ctrl+C послает процессу сигнал (не путать с Qt-сигналами), который по умолчанию немедленно завершает процесс.
Вам нужно либо обрабатывать этот сигнал самому, выполнять необходимые действия и завершаться.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #8 : Октябрь 26, 2016, 15:12 »

В дополнение к комментарию Old
std::signal поможет.
Записан
ksk-
Самовар
**
Offline Offline

Сообщений: 178



Просмотр профиля
« Ответ #9 : Октябрь 26, 2016, 19:13 »

По нажатию Ctrl+C  в консоли, процессу отправляется сигнал SIGINT.

В обработчике сигнала можно записать что-то вроде:
Код
C++ (Qt)
if (signo == SIGINT) {
   qApp->quit();
}
 

Далее можно обработать выход из приложения так:

Код
C++ (Qt)
QObject::connect(&app, &QCoreApplication::aboutToQuit, []() {
   // do something....
});
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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