我很难添加两个长整数,基本上我想要的是使用这两个变量所花费的'总时间'而且我一直保持0。
struct rusage rusage;
getrusage(RUSAGE_SELF, &rusage);
printf("TOTAL TIME \n");
printf("%ld.%06ld", (rusage.ru_utime.tv_sec, rusage.ru_utime.tv_usec),
(rusage.ru_stime.tv_sec, rusage.ru_stime.tv_usec));
它打印出0.我能够打印出用户时间,系统时间,但我无法添加它们。请帮忙。
作者想要的不是仅添加两个long
整数,而是分别添加两个timeval
结构的秒和微秒。
答案 0 :(得分:1)
像这样的东西,但这可以写得更好:
struct rusage rusage;
struct rusage tusage;
getrusage(RUSAGE_SELF, &rusage);
printf("TOTAL TIME \n");
tusage.ru_utime.tv_sec = rusage.ru_utime.tv_sec + rusage.ru_stime.tv_sec;
tusage.ru_utime.tv_usec = rusage.ru_utime.tv_usec + rusage.ru_stime.tv_usec;
tusage.ru_utime.tv_sec += tusage.ru_utime.tv_usec / 1000000;
tusage.ru_utime.tv_usec = tusage.ru_utime.tv_usec % 1000000;
printf("%ld.%06ld\n", tusage.ru_utime.tv_sec, tusage.ru_utime.tv_usec);
答案 1 :(得分:0)
您的代码既不显示结构也不显示填充方式。但是printf参数列表将tv_usec成员传递给函数两次。您使用逗号运算符,并使用括号中最右侧的成员(tv_usec)。
答案 2 :(得分:0)
您可以执行以下操作:
#include <sys/time.h>
struct timeval StartTime, EndTime;
gettimeofday(&StartTime, NULL);
/...
// Your program
.../
gettimeofday(&EndTime, NULL);
printf ("Total time = %f seconds\n",
(double) (tv2.tv_usec - tv1.tv_usec)/1000000 +
(double) (tv2.tv_sec - tv1.tv_sec));
答案 3 :(得分:0)
也许我不明白这一点,请尝试下面的话:
#include <stdio.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <stdlib.h>
int main(){
int i=0;
struct rusage rusage;
for(i=0;i<10000000;i++)
{
free(malloc(4096));
}
getrusage(RUSAGE_SELF, &rusage);
printf("TOTAL TIME \n");
printf("%ld.%06ld\n",rusage.ru_utime.tv_sec, rusage.ru_utime.tv_usec);
printf("%ld.%06ld\n",rusage.ru_stime.tv_sec, rusage.ru_stime.tv_usec);
printf("%ld.%06ld\n",rusage.ru_stime.tv_sec+rusage.ru_utime.tv_sec, rusage.ru_stime.tv_usec+rusage.ru_utime.tv_usec);
}
答案 4 :(得分:0)
我也不能明白你的观点。也许是
double total_time = (rusage.ru_utime.tv_sec + rusage.ru_stime.tv_sec) / 1000.0
+ (rusage.ru_utime.tv_usec + rusage.ru_stime_tv_usec) * 1000
total_time的单位是ms。