sleep () с float в качестве параметра не работает - PullRequest
0 голосов
/ 30 июня 2018

Я создал простой код для проверки функции sleep (). в с.

Я выполняю следующий код в попытках, чтобы программа ждала 5 секунд перед завершением:

#include <stdlib.h>
#include <stdio.h>

int main(){
    int n=0;
    for (n=1;n<=10;n++){
        sleep(.5);
    }
    return 0;
}

Однако он ожидает около 100 мс. Ну, определенно меньше, чем за одну секунду.

Теперь, если я вместо этого выполнил следующий код:

#include <stdlib.h>
#include <stdio.h>

int main(){
    int n=0;
    for (n=1;n<=10;n++){
        sleep(1);
    }
    return 0;
}

Программа ведет себя как ожидалось (ждет 10 секунд, прежде чем выйти).

Почему sleep () не выполняется должным образом, когда параметр является плавающим?

а какая самая лучшая функция совместима со всеми системами, которые я могу использовать вместо сна?

1 Ответ

0 голосов
/ 30 июня 2018

Введите man 3 sleep и прочитайте его.

sleep требует аргумента unsigned int. Он может спать только целое количество секунд.

Если вы передадите ему аргумент другого числового типа, он неявно преобразуется в unsigned int. Преобразование значения с плавающей запятой в целочисленный тип усекает.

Предполагается, что объявление для функции sleep является видимым. В вашей программе у вас нет необходимого #include <unistd.h>. В C99 или позже, вызов функции без видимого объявления недопустим. В C90 компилятор сделает определенные предположения о функции. В этом случае поведение вашей программы не определено.

То есть sleep(.5) эквивалентно sleep(0).

Поиск в документации вашей системы по usleep (микросекунды) или nanosleep (наносекунды).

...