Что делает функция halfdelay в curses?

#c #curses

#c #проклятия

Вопрос:

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

 #include <curses.h> 

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

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

Комментарии:

1. Вы пробовали поиск в Google? Доступно множество результатов ….!

2. ДА. Я попробовал поиск в Google.

3. Это недостаточно серьезно, чтобы «помечать», но, со всем уважением, я хотел бы отметить сообщение Ника как не добавляющее ничего полезного. Я погуглил «curses. halfdelay» и эта страница была самой верхней находкой! Смотрите вперед, ребята. Все есть где-то в Google!

Ответ №1:

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

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

Ответ №2:

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

этот пример считывает 5 символов из пользовательского ввода. если пользователь неактивен в течение 0,5 секунды, то getch возвращает ERR с errno, установленным в EINTR.

смотрите подробности там и там

Комментарии:

1. Полсекунды, а не 50 секунд.

2. @FredFoo Я отредактировал ответ, чтобы получить правильное значение.