Игнорировать нажатой клавишу pdcurses

#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) просто прочитать один ввод с нажатой клавиши и отбросить остальные? Я не хочу полностью отключать повторные клавиши, потому что, очевидно, я хочу, чтобы пользователь мог непрерывно перемещать курсор, удерживая клавишу.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]