我如何使我的程序睡眠一段时间?

问题描述

我想让程序进入睡眠状态一段时间。但我也希望如果按下Enter键,程序就会唤醒。

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,&(struct timeval){.tv_sec=1});
}

启用信号处理程序后,您还需要当心EINTR并用剩余时间重做请求。

不幸的是,您不能指望select()poll()来给您剩余时间(select可以并且会通过struct timeval*参数在Linux上使用,但是行为是不可移植的),因此您需要使用clock_gettime自己进行计算。