2017-07-31 80 views
0

這是一個比其他任何事情都更好奇的問題,但是說一個函數需要0.2434634秒才能完成它的工作,有沒有一種方法可以訪問這些信息並在我的代碼中使用它?如何檢索代碼中的功能持續時間信息?

+2

你可以*一次*,有沒有其他的標準方法來得到一個函數的執行時間。但在計算幀率和其他與遊戲和幀率有關的用途(或統計數據)之外,我不知道它應該用於什麼。 –

+0

@Someprogrammerdude它可能用於確定是否值得優化給定函數。 –

+0

但是你是否要求特定的工具,庫,方法?也許,在這種情況下,你還需要說出你的最終目標是什麼。 – nbro

回答

1

您可以通過存儲時間點之前函數調用測量ealpsed時間後函數調用從時間點減去它。隨着對POSIX系統精度高,這可以通過clock_gettime功能來實現:

#include <stdio.h> 
#include <time.h> 

void foo() { 
    sleep(1); 
} 

double to_milli(struct timespec* ts) { 
    return (1.0e3 * ts->tv_sec) + (1.0e-6 * ts->tv_nsec); 
} 

int main() { 
    struct timespec tp_begin, tp_end; 

    clock_gettime(CLOCK_MONOTONIC, &tp_begin); 
    foo(); /* call the desired function */ 
    clock_gettime(CLOCK_MONOTONIC, &tp_end); 

    printf("Elapsed time: %.5f ms\n", to_milli(&tp_end) - to_milli(&tp_begin)); 
    return 0; 
}