原帖及討論:http://bbs.bccn.net/thread-211272-1-1.html
簡介精確的時間計量方法在某些應用程式中是非常重要的。常用的 windows api 方法 gettickcount() 返回系統啟動後經過的毫秒數。另一方面,gettickcount() 函式僅有 1ms 的分辨精度,很不精確。
故而,我們要另外尋找一種方法來精確測量時間。
win32 api 使用 queryperformancecounter() 和 queryperformancefrequency() 方法支援高精度計時。這些方法,比「標準的」毫秒精度的計時方法如 gettickcount() 之類有高得多的精度。另一方面來說,在 c# 中使用「非託管」的 api 函式會有一定的開銷,但比起使用一點都不精確的 gettickcount() api 函式來說要好得多了。
第乙個函式 queryperformancecounter() 查詢任意時刻高精度計數器的實際值。第二個函式 queryperformancefrequency() 返回高精度計數器每秒的計數值。為了獲得某一**段經歷的時間,你需要獲得**段開始前和結束後這兩個計時時刻的高精度計數器實際值。這兩個值的差指出了**段執行所經歷的時間。
然後通過將差除以每秒計數值(高精度計時器頻率),就可以計算經過的時間了。
duration = (stop - start) / frequency
經過時間 = (停止時間 - 開始時間) / 頻率
需要關於 queryperformancecounter 和 queryperformancefrequency 的更多資訊,請參閱 msdn 文件。
**下面的類實現了 queryperformancecounter() 和 queryperformancefrequency() api 函式的功能。
using system;
using system.runtime.interopservices;
using system.componentmodel;
using system.threading;
namespace win32
}// 開始計時器
public void start()
// 停止計時器
public void stop()
// 返回計時器經過時間(單位:秒)
public double duration}}
}使用這個類很簡單。只需要建立乙個 hiperftimer 的例項,然後呼叫 start() 開始計時,stop() 停止計時。要獲得經過的時間,呼叫 duration() 函式即可。
參考下面的例子。
hiperftimer pt = new hiperftimer(); // 建立新的 hiperftimer 物件
pt.start(); // 啟動計時器
console.writeline("test/n"); // 需要計時的**
pt.stop(); // 停止計時器
console.writeline("duration: sec/n",
pt.duration); // 列印需要計時部分**的用時
C 簡單計時器
因為經常需要對 段計時,如下是乙個抽象的計時器類,包含兩個類乙個是timer類,用於計時操作,在需要計時的 段開始處呼叫start 開始計時,在 段結尾處呼叫stop 停止計時,elapse 可以獲取 段的耗時。另乙個是time ctory類用於timer的管理呼叫gettimer 即可獲取乙個計時...
C 計時器寫法
剛才乙個 裡有人問計時器怎麼寫,正好我也不太熟,就寫了個demo,和大家分享一下這個是參考師傅的寫的!計時器有好多種寫法,這裡給大家推薦乙個效能比較好的,用dispatchertimer做的,本demo是倒計時的,計時的將 seconds 改成 就可以了。不多說了,直接上 1.這是介面,簡單的xam...
iOS中的計時器
ios中定時器有三種,分別是nstimer cadisplaylink dispatch source,下面就分別對這三種計時器進行說明 一 nstimer 建立方法 1 nstimer timer nstimer scheduledtimerwithtimeinterval 1.0 target ...