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

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

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

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

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

Ответ 1

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

nodelay(stdscr,TRUE);

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

Ответ 2

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

(conio.h)

Ответ 3

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

pid_t pID = fork();
if (pID == 0) {                // child
   // Code  executed only by child process
   // getch() ...
} else if (pID < 0) {          // failed to fork
   // Throw exception
   // ... 
} else {                       // parent
   // Code executed only by parent process
   // ...
}

Ответ 4

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

Ответ 5

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

nodelay(win, TRUE); 

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