проблема с реализацией kbhit - PullRequest
0 голосов
/ 19 октября 2010

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

int kbhit(void)
{
    struct timeval tv;
    fd_set read_fd;

    tv.tv_sec=0;
    tv.tv_usec=0;
    FD_ZERO(&read_fd);
    FD_SET(0,&read_fd);

    if(select(1, &read_fd, NULL, NULL, &tv) == -1)
        return 0;

    if(FD_ISSET(0,&read_fd))
        return 1;

    return 0;
}

Может кто-нибудь объяснить мне, в чем проблема? Я использую Linux, кстати.

Я думаю, что вы, возможно, неправильно меня поняли, и подумали, что он фактически возвращает ненулевое значение после нажатия клавиши. моя проблема в том, что kbhit всегда ждет нажатия клавиши.

1 Ответ

0 голосов
/ 19 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...