如果在一定时间内没有输入,我将如何有效地取消对用户输入的调用?(我正在使用 Mac OS X 为终端/cmd 窗口编写游戏)。
我尝试关闭规范缓冲并使用在调用用户输入后加入的计时器线程。我还尝试pthread_join()
在 while 循环的参数中实现对的调用。依然没有。问题是即使规范缓冲关闭,当没有输入时,对用户输入的调用仍然被阻止。如果有输入,它工作正常。
如果我能做到这一点而不需要摆弄下载和安装 ncurses,那就太好了,但如果我必须这样做,我会这样做。
编辑:源代码:
//Most headers only pertain to my main program.
#include <iostream>
#include <termios.h>
#include <pthread.h>
#include <time.h>
#include <cstring>
#include <stdio.h>
#include <string.h>
using namespace std;
//Timer function.
void *Timer(void*) {
time_t time1, time2;
time1 = time(NULL);
while (time2 - time1 < 1) {
time2 = time(NULL);
}
pthread_exit(NULL);
}
int main() {
//Remove canonical buffering.
struct termios t_old, t_new;
tcgetattr(STDIN_FILENO, &t_old);
t_new = t_old;
t_new.c_lflag &= ~ICANON;
tcsetattr(STDIN_FILENO, TCSANOW, &t_new);
cout << "Press any key to continue." << endl;
string szInput;
int control = 0;
do {
pthread_t inputTimer;
pthread_create(&inputTimer, NULL, Timer, NULL);
szInput = "";
while (szInput == "") {
szInput = cin.get();
//Handle keypresses instantly.
if (szInput == "a") {
cout << endl << "Instant keypress." << endl;
}
}
pthread_join(inputTimer, NULL);
cout << endl << "One second interval." << endl;
control ++;
} while (control < 25);
cout << "Game Over." << endl;
return 0;
}