日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

利用系统滴答时间计算实际程序运行时间

發(fā)布時(shí)間:2025/3/15 windows 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用系统滴答时间计算实际程序运行时间 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、前言

測試一個(gè)程序的執(zhí)行時(shí)間,時(shí)間包括用戶CPU時(shí)間、系統(tǒng)CPU時(shí)間、時(shí)鐘時(shí)間。之前獲取之前時(shí)間都是在程序的main函數(shù)用time函數(shù)實(shí)現(xiàn),這個(gè)只能粗略的計(jì)算程序的執(zhí)行時(shí)間,不能準(zhǔn)確的獲取其他時(shí)間。在看《APUE》時(shí),書中有關(guān)程序時(shí)間測試程序,非常正規(guī),提供這三個(gè)時(shí)間。如是,上網(wǎng)搜了一下,進(jìn)行總結(jié)一下。

2、獲取方法

有兩種方法可以獲取,第一種是用time命令,time 進(jìn)程。第二種是通過在程序中進(jìn)行記錄,首先利用sysconf函數(shù)獲取時(shí)鐘滴答數(shù),再用times獲取tms結(jié)構(gòu)。

查看times函數(shù),man 2 tms,得到tms結(jié)構(gòu)定義和times函數(shù)聲明如下:

復(fù)制代碼 代碼如下:
struct tms {
?????? clock_t tms_utime;? /* user time */
?????? clock_t tms_stime;? /* system time */
?????? clock_t tms_cutime; /* user time of children */
?????? clock_t tms_cstime; /* system time of children */
? };
復(fù)制代碼 代碼如下:
#include <sys/times.h>

?clock_t times(struct tms *buf);

注意:此處計(jì)算的時(shí)間是時(shí)鐘滴答數(shù),需要除以系統(tǒng)時(shí)鐘滴答數(shù),得出實(shí)際的秒數(shù)。

3、測試?yán)?#xff1a;

測試程序如下:

復(fù)制代碼 代碼如下:
#include <stdio.h>
#include <stdlib.h>
#include <sys/times.h>
#include <unistd.h>

#define BUFFER_SIZE? 4 * 1024

int main()
{
??? int sc_clk_tck;
??? sc_clk_tck = sysconf(_SC_CLK_TCK);

??? struct tms begin_tms, end_tms;
??? clock_t begin, end;
??? system("date");
??? begin = times(&begin_tms);
??? sleep(2);
??? end = times(&end_tms);

??? printf("real time: %lf\n", (end - begin) / (double)sc_clk_tck);
??? printf("user time: %lf\n",
??????????? (end_tms.tms_utime - begin_tms.tms_utime) / (double)sc_clk_tck);
??? printf("sys time: %lf\n",
??????????? (end_tms.tms_stime - begin_tms.tms_stime) / (double)sc_clk_tck);
??? printf("child user time: %lf\n",
??????????? (end_tms.tms_cutime - begin_tms.tms_cutime) / (double)sc_clk_tck);
??? printf("child sys time: %lf\n",
??????????? (end_tms.tms_cstime - begin_tms.tms_cstime) / (double)sc_clk_tck);
??? return 0;
}



測試結(jié)果如下所示:

采用time命令,測試結(jié)果如下所示:


總結(jié)

以上是生活随笔為你收集整理的利用系统滴答时间计算实际程序运行时间的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。