Russian Qt Forum

Qt => Общие вопросы => Тема начата: qtист от Сентябрь 28, 2012, 09:06



Название: Консольная программа
Отправлено: qtист от Сентябрь 28, 2012, 09:06
Как сделать, чтоб консольная программа не реагировала на нажатие ^C
Чё-то ничего не получается   :'(


Название: Re: Консольная программа
Отправлено: Bepec от Сентябрь 28, 2012, 09:22
А зачем?


Название: Re: Консольная программа
Отправлено: qtист от Сентябрь 28, 2012, 09:27
чтоб никто не догадался ;D

а серьезно: выход будет по вводу определенного слова(так надо) - это сделано


Название: Re: Консольная программа
Отправлено: maint от Сентябрь 28, 2012, 09:32
в С и линухе это игнорирование сигнала
signal(СИГНАЛ, SIG_IGN);
В хедерах описано. По моему SIGINT


Название: Re: Консольная программа
Отправлено: maint от Сентябрь 28, 2012, 09:33
вспомнил, в винде вроде надо смотреть в сторону SetConsoleCtrlHandler


Название: Re: Консольная программа
Отправлено: qtист от Сентябрь 28, 2012, 09:55
попытался сделать:

void ctrl_c(int nsig){
   out << "привет"
}


.......
signal(SIGINT, ctrl_c);
.......


первое нажатие ^C отлавливается-печать есть,но прога напрочь зависает,
ещё раз нажали ^C - прога выходит
 ??? ???


Название: Re: Консольная программа
Отправлено: mutineer от Сентябрь 28, 2012, 09:56
Ctrl+Z вроде как проигнорить нельзя, так что выйти из проги можно будет и без специально слова


Название: Re: Консольная программа
Отправлено: Bepec от Сентябрь 28, 2012, 09:58
Мораль - хреначь GUI окно и имитируй консоль :)


Название: Re: Консольная программа
Отправлено: qtист от Сентябрь 28, 2012, 10:01
GUI нет и не будет(так надо)

сделал так:

signal(SIGINT, SIG_IGN);

прога напрочь зависает  ???




Название: Re: Консольная программа
Отправлено: V1KT0P от Сентябрь 28, 2012, 20:38
GUI нет и не будет(так надо)
сделал так:
signal(SIGINT, SIG_IGN);
прога напрочь зависает  ???
Тебе под какую ОС? На винде вот это код не позволяет заблочить повторную операцию: http://www.google.com.ua/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&ved=0CCwQFjAB&url=http%3A%2F%2Fwww.opennet.ru%2Fdocs%2FRUS%2Flinux_parallel%2Fnode10.html&ei=Y-BlUP6RA4zEtAaThIHQCQ&usg=AFQjCNHraN_Y0todI_PeZoVTIFXngURfLw&sig2=HgEPtbKhGwIqyH3PoZztdQ (http://www.google.com.ua/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&ved=0CCwQFjAB&url=http%3A%2F%2Fwww.opennet.ru%2Fdocs%2FRUS%2Flinux_parallel%2Fnode10.html&ei=Y-BlUP6RA4zEtAaThIHQCQ&usg=AFQjCNHraN_Y0todI_PeZoVTIFXngURfLw&sig2=HgEPtbKhGwIqyH3PoZztdQ)
Я бы на твоем месте посмотрел в сторону перехвата клавиатуры.


Название: Re: Консольная программа
Отправлено: alex312 от Сентябрь 28, 2012, 23:05
Я бы на твоем месте посмотрел в сторону перехвата клавиатуры.
Ненадо никакого перехвата клавиатуры, как уже писали выше,  на винде надо пользовать SetConsoleCtrlHandler