最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析Linux下精確控制時間的函數

 更新時間:2013年07月10日 12:33:08   作者:  
在測試程序接口運行時間的時候,常用time,gettimeofday等函數,但是這些函數在程序執(zhí)行的時候是耗費時間的
如果僅僅測試時間還行,但是如果程序中用到時間控制類的函數,如time,  gettimeofday自身還會消耗不少時間,且增加程序執(zhí)行的成本,這樣得到的時間不精確。
針對這種情況,使用CPU心跳的函數來處理時間,經封裝后的函數得到時間精確,且使用方便。

缺點:有一些機子由于硬件原因,可能不支持CPU心跳rdtscpll函數的使用,一般在虛擬機上都不行。
 
使用情況:在我做機頂盒測試工具的時候,使用該方法去控制每秒鐘連接用戶數(每秒鐘連接100個用戶),測試效果比較理想,基本是每隔1秒鐘有100個用戶上線。

下面貼上函數代碼:
復制代碼 代碼如下:

#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <asm/msr.h>
long long g_var_llOneSecJiffiesCount = 0;
long long GetCurCpuHopCount()
{
        long long llcurrentcpuhopcount;
        int iaux;
        rdtscpll(llcurrentcpuhopcount,iaux);
        return llcurrentcpuhopcount;
}
int main(int argc, char* argv[])
{
        long long llstartvalue = 0;
        long long llendvalue = 0;
        struct timeval starttm,endtm;
        int iaux = 0;
        gettimeofday(&starttm,NULL);
        rdtscpll(llstartvalue,iaux);
        sleep(3);
        rdtscpll(llendvalue,iaux);
        gettimeofday(&endtm,NULL);
        g_var_llOneSecJiffiesCount = ((llendvalue-llstartvalue)*1000000/(endtm.tv_sec*1000000-starttm.tv_sec*1000000+endt
m.tv_usec-starttm.tv_usec));//使用心跳來代替妙
        long long begin_time = GetCurCpuHopCount();
        sleep(100);//該處可以測試一些功能
        long long end_time = GetCurCpuHopCount();
        long long use_time = (end_time - begin_time) * 1000000 / g_var_llOneSecJiffiesCount;
        printf("測試一個功能 use time(us): %lld\n",use_time);
        return 0;
}

執(zhí)行結果:
測試一個功能 use time(us): 100,002,362
結論:由此可見,效果還是比較理想的。誤差極小,可以忽略。

相關文章

  • C++ 輕量級對象JSON序列化實現詳情

    C++ 輕量級對象JSON序列化實現詳情

    本文以jsoncpp庫為基礎,設計這樣一個可以支持一個函數 可以一行代碼 unmarshal /marshal 對象,需要的朋友小伙伴可以參考以下
    2021-09-09
  • C++ 自定義棧實現迷宮求解

    C++ 自定義棧實現迷宮求解

    這篇文章主要介紹了C++ 自定義棧實現迷宮求解的相關資料,需要的朋友可以參考下
    2017-07-07
  • 淺析C和C++函數的相互引用

    淺析C和C++函數的相互引用

    C++是一種面向對象的程序設計語言,為了支持函數的重載,C++對全局函數的處理方式與C有明顯的不同
    2013-10-10
  • C/C++實現個人收支系統(tǒng)的示例代碼

    C/C++實現個人收支系統(tǒng)的示例代碼

    這篇文章主要介紹了C/C++實現個人收支系統(tǒng),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • C++中inline函數詳解

    C++中inline函數詳解

    inline函數的定義:在函數聲明或定義中函數返回類型前加上關鍵字inline,即可以把函數指定為內聯函數。inline函數對編譯器而言必須是可見的,以便它能夠在調用點展開該函數。
    2015-07-07
  • C/C++判斷傳入的UTC時間是否當天的實現方法

    C/C++判斷傳入的UTC時間是否當天的實現方法

    在項目中經常會顯示一個時間,如果這個時間在今日內就顯示為時分秒,否則顯示為年月日,有需要的朋友可以參考一下
    2014-01-01
  • C語言堆棧幀的介紹與創(chuàng)建

    C語言堆棧幀的介紹與創(chuàng)建

    這篇文章主要給大家介紹了關于C語言堆棧幀的相關資料,堆棧幀 (stack frame)( 或活動記錄 (activation Tecord)) 是一塊堆棧保留區(qū)域,用于存放被傳遞的實際參數、子程序的返回值、局部變量以及被保存的寄存器,需要的朋友可以參考下
    2021-08-08
  • C++從文件中提取英文單詞的實現方法

    C++從文件中提取英文單詞的實現方法

    本文主要介紹了C++從文件中提取英文單詞的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • C++基礎學習之利用兩個棧實現一個隊列

    C++基礎學習之利用兩個棧實現一個隊列

    這篇文章主要給大家介紹了關于C++基礎學習之利用兩個棧實現一個隊列的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C++具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05
  • C++實現的鏈表類實例

    C++實現的鏈表類實例

    這篇文章主要介紹了C++實現的鏈表類,以完整實例分析了C++實現鏈表類的定義、插入、刪除、遍歷、統(tǒng)計等相關技巧,需要的朋友可以參考下
    2015-06-06

最新評論

栾城县| 邢台市| 松原市| 洞口县| 泽库县| 湘乡市| 台东市| 黄山市| 彰化市| 昔阳县| 亳州市| 静海县| 宁陕县| 永吉县| 同仁县| 治县。| 屏东县| 北京市| 林西县| 佛冈县| 阜阳市| 札达县| 沿河| 青浦区| 乳山市| 玉溪市| 茶陵县| 遵义县| 扬州市| 汉源县| 社旗县| 铁岭县| 林州市| 民丰县| 嘉荫县| 马鞍山市| 化德县| 大同县| 英山县| 安宁市| 宽甸|