Что делает функция halfdelay в curses? - PullRequest
2 голосов
/ 22 февраля 2011

Я пытаюсь разобраться в следующей программе на C:

#include <curses.h> 

int main() {
    int i; 
    initscr(); 
    halfdelay(5);
    for (i=0; i < 5; i++) 
        getch(); 
    endwin();
}

Но я не могу понять это. Я понимаю, initscr() инициализирует текущий экран, и что getch() ожидает ввода данных пользователем, чтобы разблокировать текущий терминал, но что здесь делает цикл и halfdelay()?

Ответы [ 2 ]

6 голосов
/ 22 февраля 2011

halfdelay(n); устанавливает режим ввода, при котором функция getch ожидает n десятых долей секунды (в вашей примерной программе - полсекунды), когда пользователь что-то печатает.getch возвращает нажатие клавиши, если не истек таймер, и в этом случае он возвращает ERR.Этот режим можно снова отключить с помощью cbreak() или nocbreak().

. Этот режим можно использовать в коде, который, например, запрашивает подтверждение у пользователя, но по умолчанию принимает какое-то значение, если он не отвечает в течениеопределенный период времени.

0 голосов
/ 22 февраля 2011

halfdelay используется для отключения буферизации символов с 50-секундной проверкой отсутствия активности пользователя.

этот пример читает 5 символов из пользовательского ввода. если пользователь неактивен в течение 50 секунд, то getch возвращает ERR с ошибкой, установленной в EINTR.

см. Подробности там и там

...