C:如何将clock()的返回值重置为0?
C: How to reset the reurn value of clock() to 0?
我想知道是否有办法将 clock() 函数的 return 值重置为 0。
我有这样的代码:
#include <stdio.h>
#include <time.h>
#include <stdbool.h>
int main()
{
/* clock_t t1; */
unsigned int sec = 0;
while(true) {
if(clock() >= 1000) {
printf("%u seconds has passed\r", sec);
/* reset clock()'s return value to 0 */
sec++;
}
}
return 0;
}
我应该在评论处放置什么代码来重置计时器?有什么办法,还是我处理问题的方式不正确?
我最好的猜测是你正在尝试计时
看看this
#include <time.h>
#include <stdio.h>
int main () {
clock_t start_t, end_t, total_t;
int i;
start_t = clock();
printf("Starting of the program, start_t = %ld\n", start_t);
printf("Going to scan a big loop, start_t = %ld\n", start_t);
for(i=0; i< 1000000000; i++) {
}
end_t = clock();
printf("End of the big loop, end_t = %ld\n", end_t);
total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
printf("Total time taken by CPU: %f\n", total_t );
printf("Exiting of the program...\n");
return(0);
}
clock()
一直在增加。
时钟单位在CLOCKS_PER_SEC
。一秒有 CLOCKS_PER_SEC
个时钟。
请注意 clock()
不测量实时。 clock()
衡量处理器在您的进程中花费的时间。如果您想实时测量,请使用 time.h
中的 time()
(或检查您的 OS,在 linux 上您可以使用 clock_gettime(CLOCK_MONOTONIC, ...)
或 CLOCK_REALTIME
).
将当前时钟保存在一个变量中。然后将变量与当前时钟进行比较。
通常 stdout
是行缓冲的。所以在你写一个换行符之前,什么都不会出现。如果您依赖于该行为,请确保刷新 stdout
。
#include <stdio.h>
#include <time.h>
int main() {
unsigned int sec = 0;
// we will stop the clock one second from now
clock_t stopclock = clock() + 1 * CLOCKS_PER_SEC;
while(1) {
// current time is greater then the stopping time
if (clock() > stopclock) {
// increment stopping time by one second
stopclock += 1 * CLOCKS_PER_SEC;
printf("\r%u seconds has passed", sec);
fflush(stdout);
sec++;
}
}
return 0;
}
注意:对 clock_t
类型(如 clock() + 1 * CLOCKS_PER_SEC
)的计算可能会溢出 - 优秀的代码可以处理此类极端情况。
我想知道是否有办法将 clock() 函数的 return 值重置为 0。 我有这样的代码:
#include <stdio.h>
#include <time.h>
#include <stdbool.h>
int main()
{
/* clock_t t1; */
unsigned int sec = 0;
while(true) {
if(clock() >= 1000) {
printf("%u seconds has passed\r", sec);
/* reset clock()'s return value to 0 */
sec++;
}
}
return 0;
}
我应该在评论处放置什么代码来重置计时器?有什么办法,还是我处理问题的方式不正确?
我最好的猜测是你正在尝试计时 看看this
#include <time.h>
#include <stdio.h>
int main () {
clock_t start_t, end_t, total_t;
int i;
start_t = clock();
printf("Starting of the program, start_t = %ld\n", start_t);
printf("Going to scan a big loop, start_t = %ld\n", start_t);
for(i=0; i< 1000000000; i++) {
}
end_t = clock();
printf("End of the big loop, end_t = %ld\n", end_t);
total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
printf("Total time taken by CPU: %f\n", total_t );
printf("Exiting of the program...\n");
return(0);
}
clock()
一直在增加。
时钟单位在CLOCKS_PER_SEC
。一秒有 CLOCKS_PER_SEC
个时钟。
请注意 clock()
不测量实时。 clock()
衡量处理器在您的进程中花费的时间。如果您想实时测量,请使用 time.h
中的 time()
(或检查您的 OS,在 linux 上您可以使用 clock_gettime(CLOCK_MONOTONIC, ...)
或 CLOCK_REALTIME
).
将当前时钟保存在一个变量中。然后将变量与当前时钟进行比较。
通常 stdout
是行缓冲的。所以在你写一个换行符之前,什么都不会出现。如果您依赖于该行为,请确保刷新 stdout
。
#include <stdio.h>
#include <time.h>
int main() {
unsigned int sec = 0;
// we will stop the clock one second from now
clock_t stopclock = clock() + 1 * CLOCKS_PER_SEC;
while(1) {
// current time is greater then the stopping time
if (clock() > stopclock) {
// increment stopping time by one second
stopclock += 1 * CLOCKS_PER_SEC;
printf("\r%u seconds has passed", sec);
fflush(stdout);
sec++;
}
}
return 0;
}
注意:对 clock_t
类型(如 clock() + 1 * CLOCKS_PER_SEC
)的计算可能会溢出 - 优秀的代码可以处理此类极端情况。