我正在复制控制台蛇游戏,并且在阻止输入时遇到问题。
我创建了agetch ()
函数,该函数在单独的线程中处理用户输入,在程序休眠时阻止输入,并返回字符代码。我在Linux中使用select ()
而不是线程进行了尝试,但是遇到了同样的问题。我认为该功能非常糟糕,希望您能帮助我修复该问题:
#define nullptr ((void *) 0)
void* _agetch(void* arg)
{
*(int32_t *) arg = getch();
return nullptr;
}
int32_t agetch(uint32_t interval)
{
int32_t status, status_addr;
int32_t res = 0;
pthread_t gp;
status = pthread_create(&gp, nullptr, _agetch, &res);
sleep(interval);
if (res == 0)
pthread_cancel(gp);
else
pthread_join(gp, (void**) &status_addr);
return res;
}
int main()
{
int32_t c;
for (int32_t i = 0; i < 3; ++i) {
c = agetch(3);
if (c == 0) printf("Oops, timeout\n");
else printf("The char is %c\n" c);
}
return 0;
}
在开始的3秒内,我按了4次键盘(例如“ 42ne”),我期望:
The char is 4
Oops, timeout
Oops, timeout
但是我有:
The char is 4
The char is 2
The char is n