Ответ 1
сделайте getch неблокирующий вызов с помощью параметра nodelay.
nodelay(stdscr,TRUE);
Дополнительную информацию можно найти на http://www.gsp.com/cgi-bin/man.cgi?topic=nodelay
Я использую C (gcc) и ncurses, чтобы сделать программу, которая будет контролировать данные, поступающие из последовательного порта. Программа имеет большой while
, где он считывает данные, поступающие из порта, и в то же время печатает эту информацию на экране...
Но проблема здесь:
Как он может читать ввод с моей клавиатуры, (поскольку getch()
зависает от программы до получения ввода) и в то же время читает информацию, поступающую из порта?
Возможно, мне нужно использовать другой способ (не большой while
), поэтому идеи приветствуются!
сделайте 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 // Code executed only by child process // getch() ... } else if (pID < 0) { // failed to fork // Throw exception // ... } else { // parent // Code executed only by parent process // ... }
Попробуйте select()
или poll()
. Они оба делают то же самое, но с разными интерфейсами. Вы даете ему список файловых дескрипторов, и он будет ждать, пока хотя бы один из этих дескрипторов будет готов, затем вернитесь и скажите, какие из них можно читать (или писать) без блокировки. Проверьте ссылки для примеров и более подробную информацию.
использовать cbreak()
для отключения буферизации строк
nodelay(win, TRUE);
это даст вам неблокирующую функцию getch()
.