Linux下通過gettimeofday函式獲取程式段執行時間

Linux下通過gettimeofday函式獲取程式段執行時間

        在Linux下計算某個程式段執行的時間一般使用gettimeofday函式,此函式的宣告在sys/time.h檔案中。此函式接收兩個結構體引數,分別為timeval、timezone.
        兩個結構體的宣告如下:

struct timeval {
time_t tv_sec;	/* seconds */
long tv_usec;	/* microseconds */
};
struct timezone {
int tz_minuteswest;
int tz_dsttime;
};

        一般通過gettimeofday函式獲得當前時間時,第二個引數為nullptr。結構體timeval中的tv_sec表示秒,tv_usec表示微秒。

        matlab中通過tic(start a stopwatch timer)和toc(read the stopwatch timer)兩個函式來給出程式段所執行的時間,這裡通過兩個巨集TIC和TOC來實現。測試程式碼如下:

#include <sys/time.h>
#include <unistd.h>
#include <iostream>
#define TIC                                                             \
struct timeval time1, time2;                                        \
gettimeofday(&time1, nullptr);
#define TOC                                                             \
gettimeofday(&time2, nullptr);                                      \
double elapsed_time = (time2.tv_sec - time1.tv_sec) * 1000.         \
(time2.tv_usec - time1.tv_usec) / 1000.;                \
fprintf(stdout, "Elapsed time: %lf(ms)\n", elapsed_time);
int main()
{
unsigned int tm{10};
TIC
for (int i = 0; i < 1000;   i) {
usleep(tm);
}
TOC
return 0;
}

        執行結果如下:

        執行過程:將終端定位到Linux_Code_Test/Samples_cplusplus目錄下,執行:./build.sh,然後進入到build目錄下,執行生成的執行檔案即可。

        GitHub: https://github.com/fengbingchun/Linux_Code_Test