Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > конфликт cin и getch в параллельных процессах


Автор: Олег85 10.12.2009, 10:18
 В порожденном процессе вводятся с клавиатуры значения посредством cin и производятся расчеты, в родительском процессе в течении всего времени выполнения программы ожидается нажатие клавиши Esc посредством getch для завершения работы программы. Никак не могу допереть мозгом как сделать так чтобы одновременно работали cin и getch? Чтобы Esc стала аналогом комбинации Ctrl+C. 

Автор: MAKCim 10.12.2009, 10:25
и getch и cin работают с _одним и тем_ же stdin'ом - псевдотерминальным устройством /dev/pts/X или /dev/ttyX
getch + к этому юзает ncurses
поэтом стоит копать в напралении замени cin на что-то из ncurses

Автор: Олег85 10.12.2009, 10:39
мой getch не юзает ncurses, а юзает termios, он переделан из getchar c отключением ввода через Enter, так как ncurses и curses отсутствуют. 

Автор: Олег85 10.12.2009, 11:45
проблема в том что клавиатуру одновременно читают два процесса использующие разные функции (cin и getch(getchar)) и не понятно, как сделать так чтобы можно было вводить значения подтверждая их клавишей Enter, но при нажатии Esc программа завершалась без ожидания подтверждения набора (Enter). 

Автор: djamshud 10.12.2009, 11:57
Вы читаете не клавиауту, а stdin. getch вытаскивает символ из него и cin его не видит. Попробуйте после getchar и проверки на Esc сделать ungetc.

ЗЫ. В чистом CLI принудительное завершение программы - задача терминала, а не программы. Поэтому просто завершиться при ctrl+c - самое правильное решение, без изобретения своих надстроек из палок и веревок. Если нужно успеть еще что-то сделать при внезапном завершении программы, просто перехватывайте SIGINT.

Автор: Олег85 10.12.2009, 15:08
ungetc не помог. Ctrl+C не всегда работает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)