如何在Linux中使用gettimeofday函數(shù)獲取程序執(zhí)行時(shí)間?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信平臺(tái)小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了易門(mén)免費(fèi)建站歡迎大家使用!
在Linux下計(jì)算某個(gè)程序段執(zhí)行的時(shí)間一般使用gettimeofday函數(shù),此函數(shù)的聲明在sys/time.h文件中。此函數(shù)接收兩個(gè)結(jié)構(gòu)體參數(shù),分別為timeval、timezone.
兩個(gè)結(jié)構(gòu)體的聲明如下:
struct timeval { time_t tv_sec; /* seconds */ long tv_usec; /* microseconds */ }; struct timezone { int tz_minuteswest; int tz_dsttime; };
一般通過(guò)gettimeofday函數(shù)獲得當(dāng)前時(shí)間時(shí),第二個(gè)參數(shù)為nullptr。結(jié)構(gòu)體timeval中的tv_sec表示秒,tv_usec表示微秒。
matlab中通過(guò)tic(start a stopwatch timer)和toc(read the stopwatch timer)兩個(gè)函數(shù)來(lái)給出程序段所運(yùn)行的時(shí)間,這里通過(guò)兩個(gè)宏TIC和TOC來(lái)實(shí)現(xiàn)。測(cè)試代碼如下:
#include#include #include #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; }
執(zhí)行結(jié)果如下:
執(zhí)行過(guò)程:將終端定位到Linux_Code_Test/Samples_cplusplus目錄下,執(zhí)行:./build.sh,然后進(jìn)入到build目錄下,執(zhí)行生成的執(zhí)行文件即可。
Linux是一種免費(fèi)使用和自由傳播的類UNIX操作系統(tǒng),是一個(gè)基于POSIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng),使用Linux能運(yùn)行主要的Unix工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。
看完上述內(nèi)容,你們掌握如何在Linux中使用gettimeofday函數(shù)獲取程序執(zhí)行時(shí)間的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!