我怎样才能让我的程序休眠一段时间?
how can i make my program sleep for some amount of time?
我想让我的程序休眠一段时间。但我也希望,如果按下回车键,程序就会唤醒。
clock_t t;
int sleep_time=10;
t=clock();
while(1){
int temp=clock()-t;
double time_now=(double)(temp)/CLOCKS_PER_SEC;
if(time_now>=sleep_time){
break;
}
if(getchar()=='\n'){
break;
}
}
但是这个程序会等待输入,如果没有输入它也不会中断
我该怎么做。
在 POSIX 平台上,您可以在标准输入和超时参数上使用 select()
/poll()
:
#include <sys/select.h>
#include <unistd.h>
int main(void)
{
fd_set inp; FD_ZERO(&inp); FD_SET(STDIN_FILENO,&inp);
select(1,&inp,0,0,&(struct timeval){.tv_sec=1});
}
启用信号处理程序后,您还需要注意 EINTR
并在剩余时间内重做请求。
不幸的是,您不能指望 select()
或 poll()
给您剩余的时间(select
可以并且将在 Linux,通过 struct timeval*
参数,但该行为不可移植),因此您需要使用 clock_gettime
自行计算。
我想让我的程序休眠一段时间。但我也希望,如果按下回车键,程序就会唤醒。
clock_t t;
int sleep_time=10;
t=clock();
while(1){
int temp=clock()-t;
double time_now=(double)(temp)/CLOCKS_PER_SEC;
if(time_now>=sleep_time){
break;
}
if(getchar()=='\n'){
break;
}
}
但是这个程序会等待输入,如果没有输入它也不会中断 我该怎么做。
在 POSIX 平台上,您可以在标准输入和超时参数上使用 select()
/poll()
:
#include <sys/select.h>
#include <unistd.h>
int main(void)
{
fd_set inp; FD_ZERO(&inp); FD_SET(STDIN_FILENO,&inp);
select(1,&inp,0,0,&(struct timeval){.tv_sec=1});
}
启用信号处理程序后,您还需要注意 EINTR
并在剩余时间内重做请求。
不幸的是,您不能指望 select()
或 poll()
给您剩余的时间(select
可以并且将在 Linux,通过 struct timeval*
参数,但该行为不可移植),因此您需要使用 clock_gettime
自行计算。