| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 не всегда работает. |