主题:如何让c++等待输入限时?
gzgujs
[专家分:0] 发布于 2008-04-27 14:10:00
我想让程序等待输入限定一定的时间,比如:让时限为一秒,如果一秒钟,仍未把内容发给程序,则以默认值为输入内容。
#include<conio.h>
void main()
{
char s='a';
s=getch();
//waiting here no more than one second!
//if one second passed go on ...
.
.
.
}
回复列表 (共7个回复)
沙发
星绽紫辉 [专家分:1700] 发布于 2008-04-27 15:02:00
你上面的代码是错误的,getch()执行等待时根本不会执行下面的语句。
要实现你的功能只有采用多线程,否则无法实现。
板凳
星绽紫辉 [专家分:1700] 发布于 2008-05-01 14:04:00
CWinThread *p = AfxBeginThread(...);
PROC
{
//获得当前时间
//计算出10秒后时间
whlie( 当前时间 <= 约定时间 )
{
//等....
}
//向主线程线程发送超时消息,结束输入线程
}
主线程这样处理:
1.在收到超时消息后,如果之前已经收到字符,该怎么处理?
2.怎样结束输入线程?
剩下的留给你自己思考一下吧。
3 楼
vfdff [专家分:740] 发布于 2008-05-01 15:28:00
其实也可以不用多线程的
只要设置个时钟寄存器
然后循环读取系统时间 看看是不是超过1s就可以了
4 楼
我要飞飞飞 [专家分:180] 发布于 2008-05-01 21:58:00
I/O复用--select里面有个参数可以设置等待时间,timeval
你先把select这个函数弄懂吧.
5 楼
vfdff [专家分:740] 发布于 2008-05-02 15:11:00
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 楼
soringster [专家分:20] 发布于 2008-08-24 01:44:00
sleep(10);
最方便了,什么地方需要等待在什么地方就加sleep();
7 楼
eivy [专家分:20] 发布于 2008-08-29 03:29:00
sleep(10);
最方便了,什么地方需要等待在什么地方就加sleep();
看 楼上的
我来回复