首先,抱歉我的英语不好。我使用了包含在windows.h中的GetTickCount()函数和包含在conio.h中的getch()。
我真正想要的是给用户输入char的时间限制。如果时间限制过去,程序继续执行,跳过等待用户输入字符。
char ch='A';
DWORD start_time, check_time;
start_time=GetTickCount();
check_time=start+500; //GetTickCount returns time in miliseconds, so I add 500 to wait input for half a second.
while (check_time>GetTickCount()) {
ch=getchar();
}
//do stuff with char with initial value of 'A' if user didn't enter another char during 500ms of wait.
但是getchar()停止执行程序并等待用户无限期地输入char。是否有一个简单的解决方案可以绕过这个等待,并在500毫秒通过后继续?
编辑:
根据你的提示,我写了这个,它的确有效!谢谢你们!
while (!kbhit()&&(check_time>GetTickCount()))
{
if (kbhit())
{
ch=getch();
break;
}
}
答案 0 :(得分:2)
正如查理·伯恩斯所提议的那样,来自kbhit
的{{1}}函数完全符合您的要求:它看起来是一个键被击中。
你可以这样做:
conio
小心:未经测试......
答案 1 :(得分:1)
Windows解决方案 }
:此方法使用非阻塞Windows API函数 GetAsyncKeyState(),使用 GetTickCount (我没有GetTimeTick)但是可以轻松更改{{ 1}}用于您的系统。
keyPressed(...) 查看256个键中的每个键,包括键盘的虚拟键,如果按下任何内容,则返回true:
GetTickCount()
测试keyPressed功能:
#include <windows.h>
BOOL keyPressed(char *keys)
{
for(int i = 0; i<256; i++)
if(GetAsyncKeyState(i) >> 8) return 1;
return 0;
}