導航:首頁 > 軟體知識 > 如何通過程序地址計時

如何通過程序地址計時

發布時間:2023-03-11 19:49:33

① 如何計算程序的運行時間,並精確到微秒

1 需要取得系統精確時鍾函數:
1)對於一般的實時控制,使用GetTickCount()函數就可以滿足精度要求,但要進一步提高計時精度,就要採用 QueryPerformanceFrequency()函數和QueryPerformanceCounter()函數。
2)這兩個函數是VC提供的僅供 Windows 9X使用的高精度時間函數,並要求計算機從硬體上支持高精度計時器。
3) QueryPerformanceFrequency()函數和 QueryPerformanceCounter()函數的原型為:

BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);

BOOL QueryPerformanceCounter(LARGE_INTEGER *lpCount);
數據類型LARGE—INTEGER既可以是一個作為8位元組長的整型數,也可以是作為兩個4位元組長的整型數的聯合結構,其具體用法根據編譯器是否支持64位而定。該類型的定義如下:
typedef union _LARGE_INTEGER
{
struct
{
DWORD LowPart; // 4位元組整型數
LONG HighPart; // 4位元組整型數
};
LONGLONG QuadPart;

// 8位元組整型數
} LARGE_INTEGER;

4)在進行計時之前,應該先調用QueryPerformanceFrequency()函數獲得機器內部計時器的時鍾頻率。筆者在三種PentiumⅡ機器上使用該函數,得到的時鍾頻率都是1193180Hz。接著,筆者在需要嚴格計時的事件發生之前和發生之後分別調用QueryPerformanceCounter()函數,利用兩次獲得的計數之差和時鍾頻率,就可以計算出事件經歷的精確時間。
以下程序是用來測試函數Sleep(100)的精確持續時間。

LARGE—INTEGER litmp;
LONGLONG QPart1,QPart2;
double dfMinus, dfFreq, dfTim;
QueryPerformanceFrequency(&litmp);
// 獲得計數器的時鍾頻率
dfFreq = (double)litmp.QuadPart;
QueryPerformanceCounter(&litmp);
// 獲得初始值
QPart1 = litmp.QuadPart;
Sleep(100) ;
QueryPerformanceCounter(&litmp);
// 獲得終止值
QPart2 = litmp.QuadPart;
dfMinus = (double)(QPart2 - QPart1);
dfTim = dfMinus / dfFreq;
// 獲得對應的時間值
執行上面程序,得到的結果為dfTim=0.097143767076216(秒)。細心的讀者會發現,每次執行的結果都不一樣,存在一定的差別,這是由於Sleep()自身的誤差所致。

閱讀全文

與如何通過程序地址計時相關的資料

熱點內容
商業產品的照片怎麼調色 瀏覽:267
男生沒回信息一般在干什麼 瀏覽:244
通用技術作品思路怎麼寫 瀏覽:418
想做葯品代理怎麼辦 瀏覽:131
四室住宅產權證未滿五年如何交易 瀏覽:203
測你是什麼嘴型小程序 瀏覽:862
遼陽做小程序多少錢 瀏覽:355
調料新手怎麼去市場了解價格質量 瀏覽:698
南陽現貨交易市場怎麼樣 瀏覽:68
肉雞技術員待遇怎麼樣 瀏覽:398
買貓產品怎麼搜 瀏覽:201
哪些手游可以交易裝備的 瀏覽:865
申通代理商什麼時候拿到錢 瀏覽:815
串口通信數據出錯是什麼原因 瀏覽:500
重要信息修改什麼意思 瀏覽:152
蘋果手錶顯示信息能顯示多少 瀏覽:280
環境質量數據來自哪裡 瀏覽:566
廣東番禺哪裡有人才市場 瀏覽:792
騷擾罪多少條信息夠判刑 瀏覽:857
捷達電子轉向怎麼刷數據 瀏覽:380