LINUX.ORG.RU

Как считывать нажатие клавиши без задержек?

 , , ,


1

3

Есть такой код с использованием ncurses

#include <iostream>
#include <ncurses.h>
#include <unistd.h>

using namespace std;

int main()
{
    char c = 'a';

    initscr();
    noecho();

    do {
        c = getch();
        addch(c);
    } while(c != 'q');

    endwin();
    return 0;
}

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

Пробовал сделать неблокирующий getch() с помощью

nodelay(stdscr, TRUE);

и обрабатывать ERR в цикле, эффект остаётся.

★★★★
Ответ на: комментарий от anonymous

Вот: setup_con() настраивает, а read_console() читает. Если тебе нужно эхо, убери отмену ~ECHO в настройках.

anonymous
()

То, что ты наблюдаешь — это keyboard repeat.

Тебе же надо ловить не введённые символы, а события «клавиша нажата»/«клавиша отпущена».

ncurses это imho не умеет. Т.ч. тебе нужен X11 или evdev. Вроде как pygame это тоже может.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)

это проблема в настройках клавиатуры. man kbdrate

Посмотри исходники showkey и man showkey

vel ★★★★★
()

Спасибо всем, кто отписался, сегодня попробую что нибудь сделать.

WRG ★★★★
() автор топика
Ответ на: комментарий от andreyu

Да:)

На самом деле так можно привлечь больше народу к проблеме. Например, eddy_em наверняка игнорит C++, кто-нибудь может делает наоборот.

WRG ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.