как я могу заставить свою программу спать в течение некоторого времени?

#c #time #sleep

#c #время #сон

Вопрос:

Я хочу перевести свою программу в спящий режим на некоторое желаемое время. но я также хочу, чтобы при нажатии 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;
    }

}
  

но эта программа будет ждать ввода, и если ввод не задан, он не сломается
Как я могу это сделать.

Комментарии:

1. Используйте sleep() , вот ссылка для этого linux.die.net/man/3/sleep

2. В системах posix, таких как Linux, вы можете использовать select для ожидания доступности ввода. select также имеет тайм-аут. Вызов select переведет процесс в спящий режим до тех пор, пока не будет доступен ввод или не истечет время ожидания (на самом деле, есть также случай прерывания сигнала).

Ответ №1:

На платформе POSIX вы можете использовать select() / poll() при стандартном вводе и с параметром тайм-аута:

 #include <sys/select.h>
#include <unistd.h>
int main(void)
{
    fd_set inp; FD_ZERO(amp;inp); FD_SET(STDIN_FILENO,amp;inp);
    select(1,amp;inp,0,0,amp;(struct timeval){.tv_sec=1});
}
  

При включенных обработчиках сигналов вам также нужно будет следить EINTR и повторять запрос с оставшимся временем.

К сожалению, вы не можете рассчитывать ни на то select() , ни poll() на то, чтобы предоставить вам оставшееся время ( select может и будет в Linux, через struct timeval* параметр, но поведение не переносимо), поэтому вам нужно будет использовать clock_gettime его для вычисления самостоятельно.