В чем разница между nodelay () и cbreak () в ncurses? - PullRequest
1 голос
/ 21 мая 2019

В чем разница между nodelay() и cbreak() в курсах?И зачем использовать эти функции, потому что у нас есть getch()!Если я понимаю, getch() разрешает получить ключ непосредственно после того, как пользователь нажал клавишу.Так что nodelay и cbreak бесполезны, не так ли?

1 Ответ

0 голосов
/ 21 мая 2019

Это две совершенно разные функции.

Из документации:

Обычно драйвер tty буферизует набранные символы до тех пор, пока не будет напечатан перевод строки или возврат каретки. Подпрограмма cbreak отключает буферизацию строки и обработку символов стирания / уничтожения (символы прерывания и управления потоком не затрагиваются), что делает символы, набранные пользователем, немедленно доступными для программы. Процедура nocbreak возвращает терминал в нормальный (приготовленный) режим.

...

Опция nodelay делает вызов getch неблокирующим. Если вход не готов, getch возвращает ERR. Если отключено (bf - FALSE), getch ждет, пока не будет нажата клавиша.

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

Описание nodelay довольно очевидно. getch не будет ждать, но вернется мгновенно, независимо от того, нажата какая-либо клавиша или нет.

...