Является ли библиотека time.h в процессоре c интенсивной?

Я сделал эту короткую программу на C, но всякий раз, когда я запускаю ее, вентилятор моего компьютера начинает вращаться очень быстро. Я что-то делаю не так, или библиотека времени как-то сильно загружает процессор? Вот код:

#include <stdio.h>
#include <time.h>

void delay(int seconds){
    int clocks_to_wait = seconds * CLOCKS_PER_SEC;
    clock_t time = clock();
    while(clock() < time + clocks_to_wait){
        
    }

}


int main(){
    while(1){
        printf("\r");
        printf("-");
        delay(1);
        printf("\r");
        printf("\\");
        delay(1);
        printf("\r");
        printf("|");
        delay(1);
        printf("\r");
        printf("/");
        delay(1);
        printf("\r");
        printf("-");
        delay(1);
    }
    return 0;
}

Я предполагаю, что пустой цикл while заставляет процессор нагреваться? Я прав?

Изменить: проблема решена, источник: Простая программа ‹Time.h› занимает много места количество ЦП


person Gurneet singh    schedule 01.02.2021    source источник
comment
while(clock() < time + clocks_to_wait) это называется опрос и является худшим способом проверки статуса. Вам нужно использовать таймер (в асинхронных программах) или спать вместо этого   -  person phuclv    schedule 01.02.2021


Ответы (1)


Да, цикл emtpy while, подобный этому, просто будет использовать 100% времени ЦП, занятого ожиданием, пока время не догонит столько, сколько вы хотите ждать.

Если вы хотите подождать, не тратя процессорное время (и не тратя батарею на нагрев и запуск вентилятора), вам нужно использовать задержку ОС, которая ожидает без использования ЦП. В системах Posix (Linux, OSX, UNIX и т. д.) это sleep, который приостанавливается на определенное количество секунд, или вызов nanosleep, который приостанавливается на timespec, указывающий задержку в наносекундах.

В вашем случае просто замените вызовы delay(1); на sleep(1);

person Chris Dodd    schedule 01.02.2021