#include <curses.h>
#include "SourceFiles/generalFunc.h"
int main(){
initscr();
cbreak();
noecho();
wtimeout(stdscr,0); //NON-BLOCKING IO. getch returns ERR if no input is read.
int x = 0;
sleepMilli(3000); //three seconds
while((x = wgetch(stdscr)) != ERR){
x = wgetch(stdscr);
//flushinp();
waddch(stdscr,x);
wrefresh(stdscr);
}
waddstr(stdscr, " THAT'S ALL FOLKS!");
wrefresh(stdscr);
sleepMilli(2000);
endwin();}
sleepMilli
это функция, которая ожидает сколько угодно миллисекунд
Я пишу программу, которая обнаруживает нажатие клавиши, выполняет некоторую работу, ждет определенное количество времени t
, а затем обнаруживает нажатие другой клавиши, выполняет некоторую работу и т. д. Конечно, если t
имеет большой размер, и пользователь удерживает нажатой клавишу, эта клавиша повторяется в буфере ввода, поэтому, когда пользователь отпускает клавишу, программа продолжит обработку этого буфера ввода, пока это не будет сделано с повторным вводом клавиши. Это будет выглядеть странно, особенно если эта повторяющаяся клавиша перемещает курсор терминала (он будет продолжать двигаться долго после того, как пользователь отпустит).
Мне нужен способ прочитать один ввод с удерживаемой клавиши, а затем отбросить остальные. я думал это было то, что flushinp()
сделал, но я понял, что был неправ. В приведенной выше программе, если flushinp()
закомментирован, а затем с помощью ввода, например:
cvcvcvcvcvcvcv
(поэтому я не держу нажатой клавишу) Вывод:
cvcvcvcvcvcvcv
Если я удерживаю клавишу c
тогда вывод:
cccccccccccccc
Если я раскомментирую flushinp()
и сделать те же два входа, выходы:
c
а также
cccccccccccccc
Так flushinp()
работает только для однократных нажатий клавиш, но не для повторных нажатий клавиш. Возможно ли (в 64-битной Windows) просто прочитать один ввод с нажатой клавиши и отбросить остальные? Я не хочу полностью отключать повторные клавиши, потому что, очевидно, я хочу, чтобы пользователь мог непрерывно перемещать курсор, удерживая клавишу.
Задача ещё не решена.
Других решений пока нет …