2013-03-14 73 views
0

我有一个困难时期增加了两个长整型,基本上就是我想要的是“总”一次使用这两个变量了。我不断获取0增加了两个长整数用C

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

可能是重复的http://stackoverflow.com/questions/10509660/getting-getrusage-to-measure-system-time-in-c – 2013-03-14 06:48:16

+0

重复http://stackoverflow.com/questions/565150/bigint -in-c – 2013-03-14 06:51:08

+1

您需要编辑您的问题以包含无法使用的代码。将它从源文件复制并粘贴到您的问题中。 – 2013-03-14 07:04:07

回答

0

您的代码不会显示结构,也不会显示填充结构。但是printf参数列表将tv_usec成员的两倍传递给该函数。您使用逗号运算符,并使用括号(tv_usec)中最右侧的成员。

+0

如果答案解决了您的问题,您可以单击“接受”检查方案。 – harper 2013-06-07 03:08:56

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); 
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)); 
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); 
} 
+0

我的测试结果如下:lcchen @ lcchen-desktop:〜$ ./a.out TOTAL TIME 0.484030 0.020001 0.504031 – 2013-03-14 07:01:03

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。