#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 上)只从按住的键中读取一个输入并丢弃其余的?我不想完全关闭重复键,因为显然我希望用户能够通过按住一个键来连续移动光标。