Как получить ввод с клавиатуры при одновременном выполнении других действий?

Я использую C (gcc) и ncurses, чтобы создать программу, которая будет контролировать данные, поступающие из последовательного порта. Программа имеет большое while , когда она считывает данные, поступающие из порта, и в то же время печатает эту информацию на экране …

Но проблема здесь:

Как он может читать ввод с моей клавиатуры (поскольку getch() зависает от программы до тех пор, пока не получит вход) и в то же время читает информацию, поступающую из порта?

Возможно, мне нужно использовать другой способ (не большое while ), поэтому идеи приветствуются!

make getch неблокирующий вызов с использованием опции nodelay .

 nodelay(stdscr,TRUE); 

Дополнительную информацию можно найти по адресу http://www.gsp.com/cgi-bin/man.cgi?topic=nodelay

В зависимости от вашей среды у вас может быть функция kbhit (), она просто пикает в буфер клавиатуры и возвращает ноль, если там есть ключ, – тогда вы можете сделать getch ().

(Conio.h)

Может быть, fork ()? Просто имейте в виду, что ребенок работает в отдельном процессе, поэтому переменные не могут быть напрямую разделены между ними

  pid_t pID = fork ();
 if (pID == 0) {// child
    // Код, выполняемый только дочерним процессом
    // getch () ...
 } else if (pID <0) {// не удалось развернуть
    // Исключить исключение
    // ... 
 } else {// родительский
    // Код, выполняемый только родительским процессом
    // ...
 }

Попробуйте select() или poll() . Они оба делают то же самое, но с разными интерфейсами. Вы даете ему список файловых дескрипторов, и он будет ждать, пока хотя бы один из этих дескрипторов будет готов, затем вернитесь и скажите, какие из них можно читать (или писать) без блокировки. Проверьте ссылки для примеров и более подробную информацию.

используйте cbreak() для отключения буферизации строк

 nodelay(win, TRUE); 

это даст вам неблокирующую getch() .