请教,如何给等待输入限定时间?

acdbxzyw 2009-03-07 04:58:49
请问牛人
我在等待输入的时候 ,如何限定等待的时间,如果时间超过而没有输入的话,则自动执行其他的步骤
s=getch();
//waiting here no more than one second!
//if one second passed go on ...


上网搜了下,说是用多线程,或者select 函数,这两个都还不会
select 函数变量太多,类型也不认识
请问各位能告诉我该怎么填写这个函数吗?
getch()函数过了一定时间则执行下面的步骤
先谢过了O(∩_∩)O
...全文
117 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
vamking_boy 2009-03-10
  • 打赏
  • 举报
回复
好东西,正需要写这样的延时程序,学习了
daidodo 2009-03-07
  • 打赏
  • 举报
回复
参考异步IO模型,Linux下用poll或select。
bo.cui 2009-03-07
  • 打赏
  • 举报
回复
我用多进程写了一个,你看看吧~~
  1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <signal.h>
5 #include <time.h>
6
7 int sys_err(char *str)
8 {
9 puts(str);
10 exit(0);
11 }
12
13 void sig_usr(int a)
14 {
15 exit(0);
16 }
17
18 int main(void)
19 {
20 char str[100];
21 pid_t pid;
22
23 if((pid=fork()) < 0)
24 sys_err("fork error");
25 else if(pid == 0)
26 {
27 if(signal(SIGUSR1, sig_usr) == SIG_ERR)
28 sys_err("signal error");
29 sleep(5);
30 kill(getppid(), SIGKILL);
31 }
32 else
33 {
34 scanf("%99s", str);
35 kill(pid, SIGUSR1);
36 puts("\nis OK, input is:");
37 puts(str);
38 }
39 return 0;
40 }
acdbxzyw 2009-03-07
  • 打赏
  • 举报
回复
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include<windows.h>
#define MT 600000

int main(void)
{
int i,flag=1;
char c;
for(i=0;i<10;i++){
Sleep(500);
if(kbhit()){ flag = false ; break;}
}
/*
while (!kbhit()) //如果键盘有动作,则退出
{
//
如果你使用的是TC这个你可以直接使用delay(MT);
如果不是,直接写一个延迟程序,用二重循环来
mydelay(MT);

//
Sleep(5000);

flag = 1; //时间到了,标志位置1
if (flag)
break;
}
*/
if (flag){
printf("没有按键按下");
Sleep(2000);
}
else
{
c = getch(); //用以接受你刚才的按键
printf("%c\n",c); //可换成你的要执行的块
/*

加入你的执行块
*/
printf("dude , well done\n");
Sleep(5000);
}
return 0;
}




呵呵 谢谢楼上 我改了一下 行了 谢谢 谢谢
acdbxzyw 2009-03-07
  • 打赏
  • 举报
回复
上面的程序 永远是 没有按键按下
这个问题。。。
呵呵
traceless 2009-03-07
  • 打赏
  • 举报
回复
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define MT 600000

int main(void)
{
int flag=0;
char c;
while (!kbhit()) //如果键盘有动作,则退出
{
/*
如果你使用的是TC这个你可以直接使用delay(MT);
如果不是,直接写一个延迟程序,用二重循环来
mydelay(MT);

*/

flag = 1; //时间到了,标志位置1
if (flag)
break;
}

if (flag)
printf("没有按键按下");
else
{
c = getch(); //用以接受你刚才的按键
printf("有"); //可换成你的要执行的块
/*

加入你的执行块
*/
}
return 0;
}


不得不说,如果没有用到线程的话,不准确的
上面的程序只供思路参考
acdbxzyw 2009-03-07
  • 打赏
  • 举报
回复
这个
呵呵 我写的是windows程序
而且虽然学了linux, 但是基本跟不会一样
呵呵 能从windows方面帮我解决一下吗
qq675927952 2009-03-07
  • 打赏
  • 举报
回复
在linux可以通过,int termflags = fcntl(0,F_GETFL);
termflags |= O_NDELAY ;
fcntl(0,F_SETFL,termflags) ;
acdbxzyw 2009-03-07
  • 打赏
  • 举报
回复

那你能告诉我怎么用吗?
ctan 2009-03-07
  • 打赏
  • 举报
回复
标准C中没提供这样的函数
acdbxzyw 2009-03-07
  • 打赏
  • 举报
回复
自己顶一下
呜呜 等待

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧