忽略用pdcurses按住按键

时间:2016-10-28 19:48:20

标签: c++ 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 个答案:

没有答案