Linux下精確控制時間的函數
如果僅僅測試時間還行,但是如果程序中用到時間控制類的函數,如time, gettimeofday自身還會消耗不少時間,且增加程序執行的成本,這樣得到的.時間不精確。
針對這種情況,使用CPU心跳的函數來處理時間,經封裝後的函數得到時間精確,且使用方便。
缺點:有一些機子由於硬件原因,可能不支持CPU心跳rdtscpll函數的使用,一般在虛擬機上都不行。
使用情況:在我做機頂盒測試工具的時候,使用該方法去控制每秒鐘連接用户數(每秒鐘連接100個用户),測試效果比較理想,基本是每隔1秒鐘有100個用户上線。
下面貼上函數代碼:
複製代碼 代碼如下:
#include
#include
#include
#include
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/(_sec*_sec*1000000+endt
__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): %lldn",use_time);
return 0;
}
執行結果:
測試一個功能 use time(us): 100,002,362
結論:由此可見,效果還是比較理想的。誤差極小,可以忽略。
-
電腦bios啟動項設置圖文教程詳解
BIOS是英文BasicInputOutputSystem的縮略語,直譯過來就是基本輸入輸出系統。其實,它是一組固化到計算機內主板上一個ROM芯片上的程序,它保存着計算機最重要的基本輸入輸出的程序、系統設置信息、開機後自檢程序和系統自啟動程序。其主要功能是為計算機提供最底層...
-
Linux下把多個網卡設置成虛擬網卡的技巧方法
現在很多電腦都有不只一塊網卡,但是一塊網卡出現故障,整個網絡都會中斷。但是在Linux系統中只要創建Linux虛擬網卡,就不會遇到這種麻煩。本文就來介紹一下Linux下把多個網卡設置成多個虛擬網卡的技巧。以eth0與eth1來虛擬成為bond0為例:------綁定的前提條件:芯片組...
-
在Linux系統中批量添加用户的方法講解教程
在Linux系統中批量添加用户的方法講解教程我們什麼時候才需要大批量添加用户呢?有時我們需要讓幾十個或更多的用户在主機上完成相同或相似的任務,比如我們想同時添加一堆的ftp用户,這些ftp用户歸屬同一組,但不允許他們通過終端或遠程登錄服務器;有時我們可能為了教...
-
Linux操作系統基礎知識
Linux就是一個操作系統,它可以管理整個計算機硬件,並且可以接收我們的指令,來指揮硬件完成相應的任務,並把結果反饋給我們。Linux操作系統基礎知識你瞭解多少呢?下面是相關的知識,歡迎閲讀。Linux操作系統概述Q1.什麼是GNU?Linux與GNU有什麼關係?A:1)GNU是GNUisNotUn...