Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 睡眠时阻断stdin_C_Multithreading_Io_Stdin - Fatal编程技术网

C 睡眠时阻断stdin

C 睡眠时阻断stdin,c,multithreading,io,stdin,C,Multithreading,Io,Stdin,我正在复制主机蛇游戏,有阻止输入的问题 我创建了agetch()函数,它在一个单独的线程中处理用户输入,在程序休眠时阻止输入,并返回字符代码。我在Linux中用select()而不是线程尝试了这一点,但我遇到了同样的问题。我认为该功能很糟糕,希望您能帮助我修复它: #定义空ptr((void*)0) void*\u agetch(void*arg) { *(int32_t*)arg=getch(); 返回空ptr; } int32时间间隔(uint32时间间隔) { int32_t状态,状态地址

我正在复制主机蛇游戏,有阻止输入的问题

我创建了
agetch()
函数,它在一个单独的线程中处理用户输入,在程序休眠时阻止输入,并返回字符代码。我在Linux中用
select()
而不是线程尝试了这一点,但我遇到了同样的问题。我认为该功能很糟糕,希望您能帮助我修复它:

#定义空ptr((void*)0)
void*\u agetch(void*arg)
{
*(int32_t*)arg=getch();
返回空ptr;
}
int32时间间隔(uint32时间间隔)
{
int32_t状态,状态地址;
int32_t res=0;
pthread_t gp;
状态=pthread_create(&gp,nullptr,_agetch,&res);
睡眠(间歇);
如果(res==0)
pthread_cancel(gp);
其他的
pthread_join(gp,(void**)和status_addr);
返回res;
}
int main()
{
int32_t c;
对于(int32_t i=0;i<3;++i){
c=agetch(3);
如果(c==0)printf(“Oops,timeout\n”);
else printf(“字符为%c\n”c);
}
返回0;
}
在前3秒内,我按了4次键盘(例如“42ne”),我预计:

The char is 4
Oops, timeout
Oops, timeout
但我有:

The char is 4
The char is 2
The char is n
在设置
arg
之前,尝试将
sleep(4)
放入
\u agetch()
。它肯定会给你想要的输出!如果是这样的话,一定要想一想当你把
sleep()
放到
\u agetch()
中时实际发生了什么。在设置
arg
之前,试着把
sleep(4)
放到
。它肯定会给你想要的输出!如果是的话,一定要想一想当你把
sleep()
放进去的时候到底发生了什么。