回 帖 发 新 帖 刷新版面

主题:如何让c++等待输入限时?

我想让程序等待输入限定一定的时间,比如:让时限为一秒,如果一秒钟,仍未把内容发给程序,则以默认值为输入内容。
#include<conio.h>
void main()
{
    char s='a';
    s=getch();
    //waiting here no more than one second!
    //if one second passed go on ...
    .
    .
    .
}

回复列表 (共7个回复)

沙发

你上面的代码是错误的,getch()执行等待时根本不会执行下面的语句。
要实现你的功能只有采用多线程,否则无法实现。

板凳

CWinThread *p = AfxBeginThread(...);

PROC
{
  //获得当前时间
  //计算出10秒后时间
  whlie(  当前时间 <= 约定时间 )
  {
   //等....
   }
  
   //向主线程线程发送超时消息,结束输入线程
}

主线程这样处理:
1.在收到超时消息后,如果之前已经收到字符,该怎么处理?

2.怎样结束输入线程?

剩下的留给你自己思考一下吧。

3 楼

其实也可以不用多线程的 
只要设置个时钟寄存器
然后循环读取系统时间 看看是不是超过1s就可以了

4 楼

I/O复用--select里面有个参数可以设置等待时间,timeval
你先把select这个函数弄懂吧.

5 楼

select
The select function determines the status of one or more sockets, waiting if necessary, to perform synchronous I/O.

int select(
  int nfds,                           
  fd_set FAR *readfds,               
  fd_set FAR *writefds,              
  fd_set FAR *exceptfds,             
  const struct timeval FAR *timeout  
);
Parameters
nfds 
[in] Ignored. The nfds parameter is included only for compatibility with Berkeley sockets. 
readfds 
[in, out] Optional pointer to a set of sockets to be checked for readability. 
writefds 
[in, out] Optional pointer to a set of sockets to be checked for writability 
exceptfds 
[in, out] Optional pointer to a set of sockets to be checked for errors. 
timeout 
[in] Maximum time for select to wait, provided in the form of a TIMEVAL structure. Set the timeout parameter to NULL for blocking operation.

6 楼

sleep(10);
最方便了,什么地方需要等待在什么地方就加sleep();

7 楼

sleep(10);
最方便了,什么地方需要等待在什么地方就加sleep();




看  楼上的 

我来回复

您尚未登录,请登录后再回复。点此登录或注册