2013-03-14 81 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。