【问题标题】:how can i make my program sleep for some amount of time?我怎样才能让我的程序休眠一段时间?
【发布时间】:2021-01-18 17:54:30
【问题描述】:

我想让我的程序休眠一段时间。但我也希望如果按下回车,程序就会唤醒。

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;
    }

}

但是这个程序会等待输入,如果输入没有给出它不会中断 我该怎么做。

【问题讨论】:

  • 使用sleep(),这里是它的链接linux.die.net/man/3/sleep
  • 在 Linux 等 posix 系统上,您可以使用 select 等待输入可用。 select 也有超时。调用select会使进程进入休眠状态,直到任一输入可用或超时到期(实际上也有被信号中断的情况)。

标签: c time sleep


【解决方案1】:

在 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 自行计算。

【讨论】:

    猜你喜欢
    • 2013-08-29
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 2022-08-20
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多