2016-06-14 5 views
1

Я хочу, чтобы задержать мою программу на 500 мс, используя тип clock_t .Для примера я следующий код:Функция часов usleep не работает прямо в программе c?

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

int main() 
{ 
    clock_t start_t, end_t, total_t,start_2,end_2,total_2; 
    int i; 

    start_t = clock(); 
    printf("start_t = %ld\n", start_t); 

    //do a loop 
    for(i=0; i< 10000000; i++) 
    { 
    } 

    end_t = clock(); 


    printf("end_t = %ld \n", end_t); 

    total_t = (double)(end_t - start_t)*1000/CLOCKS_PER_SEC; 
    printf("Total1 in msec %ld \n",total_t); 



    start_2=clock(); 
    printf("start_2 %ld\n ", start_2); 
    usleep(500000); 

    end_2=clock(); 
    printf("end_2 %ld\n ", end_2); 
    total_2=(double)(start_2-end_2)*1000/CLOCKS_PER_SEC; 
    printf("Total2 in msec %ld\n ", total_2); 


    return(0); 
} 

Я обнаружил, что USleep принимает значение микросекунды в качестве входных данных. Так я поставил 500000.

Но я получаю:

start_t = 1041 
end_t = 50441 
Total1 in msec 49 

start_2 50446 
end_2 50478 
Total2 in msec 0 

Что идет не так? Почему total2 = 0? Любая помощь, пожалуйста?

+2

* «Функция часов() определяет количество времени процессора, используемого ...» * Когда вы спите, время проходит, но не используется процессорное время. – user3386109

+0

Так мне нужна функция delay()? –

+0

Нет, вам нужно использовать другую функцию для измерения времени на стене. На MAC используйте 'mach_absolute_time'. В Windows это 'QueryPerformanceCounter'. – user3386109

ответ

0

Найдено решение. Я написал функцию задержки:

void delay (unsigned int msecs) { 
clock_t goal = msecs*CLOCKS_PER_SEC/1000 + clock(); //convert msecs to clock count 
while (goal > clock());    // Loop until it arrives. 

}

0

Фактически, функция часов записывает номер цикла процессора для этого процесса. Когда вы вызываете функцию usleep, процессор не будет предоставлять какой-либо временной слайд для этого процесса. Итак, настоящая причина - функция clock(). Возможно, вы можете найти некоторые функции для получения системного времени. Я думаю, это сработает.

Смежные вопросы