Я просто пишу программу переменного тока для печати целочисленного значения каждую секунду в качестве упражнения, эта программа печатает целое число после ожидания в течение одной секунды, прежде чем печатать следующее целое число, поэтому программе требуется 5 секунд для завершения выполнения. Я использую clock_t
и time()
как таймер, и он работает, но когда я использую clock_t
и clock
в качестве таймера, он не работает.
Насколько я знаю, time_t
и time()
- это абсолютное время и использование секунд, прошедших с 1970 года. В то время как clock_t
и clock()
используют время с момента запуска программы.
Это первый код, использующий time_t
и time(NULL)
.
#include <stdio.h>
#include <time.h>
int main (void) {
int i;
int sec=1;
time_t start,end;
start=time(NULL);
for(i=1;i<=5;i++){
time_t wait=sec+time(NULL);
while(time(NULL) < wait) {}
printf("%d\n",i);
}
end=time(NULL);
printf("program take %d second\n",(unsigned int)difftime(end,start));
return 0;
}
и это результат при запуске программы:
1
2
3
4
5
program take 5 second
выполнение программы точно печатает целые числа каждую секунду или ждет одну секунду, прежде чем печатать следующее целое число
это вторая программа, использующая clock_t
и clock()
#include <stdio.h>
#include <time.h>
int main (void) {
int sec=1;
int i;
clock_t start,end;
start=clock();
for(i=1;i<=5;i++){
clock_t wait=sec*CLOCKS_PER_SEC;
while(clock ()<wait){}
printf("%d\n",i);
}
end=clock();
printf("the program take %lf second\n",(double)(end-start)/CLOCKS_PER_SEC);
return 0;
}
Это результат второй программы с использованием clock_t
и clock()
1
2
3
4
5
the program take 0.998901 second
и после выполнения он не печатает ровно каждую секунду, а сначала ждет одну секунду, а затем печатает все целые числа вместо того, чтобы ждать одну секунду, прежде чем печатать следующее целое число.
Пожалуйста, объясните, что происходит со второй программой и в чем разница между функциями time() и clock()?
time()
сообщает в режиме реального времени (обычно в секундах с 1970 года).clock()
сообщает о процессорном времени. - person Keith Thompson   schedule 18.10.2014