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