納秒與微秒級時間

2021-06-16 08:17:39 字數 2036 閱讀 1646

1秒 = 1000毫秒 = 1000 000微秒 = 1000 000 000 納秒

大家都知道windows下的時間計數器提供的是毫秒級的時間計數。那麼怎麼提供乙個精度更高的計數器呢。在intel   pentium以上級別的cpu中,有乙個稱為「時間戳(time   stamp)」的部件,它以64位無符號整型數的格式,記錄了自cpu上電以來所經過的時鐘週期數。對於乙個主頻為1ghz的cpu,則其乙個時鐘週期就是一納秒。由於目前的cpu主頻都非常高,因此這個部件可以達到 納秒級的計時精度。在pentium以上的cpu中,提供了一條機器指令rdtsc(read   time   stamp   counter)來讀取這個時間戳的數字,並將其儲存在edx:eax暫存器對中。由於edx:eax暫存器對恰好是win32平台下c++語言儲存函式 返回值的暫存器,所以我們可以把這條指令看成是乙個普通的函式呼叫。像這樣:    

inline   unsigned   __int64   getcpucyclecount()       

如果rdtsc不被c++的內嵌彙編器直接支援,我們還可以要用_emit偽指令直接嵌入該指令的機器碼形式0x0f、0x31,如下:     

inline   unsigned   __int64   getcpucyclecount()     

以後在需要計數器的場合,可以像使用普通的win32   api一樣,呼叫兩次getcpucyclecount函式,比較兩個返回值的差,然後利用cpu的時鐘週期的差數就可以計算出乙個納秒級的計時。公式如下  

時間   =   cpu時鐘週期數差數   /   cpu主頻速率(hz)

vc中的實現**如下:

// 納秒 微秒 時間精度的實現

#include

#include

#include

//使用

timegettime()

需要包含此標頭檔案

#pragma

comment

(lib

,"winmm.lib"

)       

//使用

timegettime()

需要包含此

lib//

微秒級class

microsecondtimer

inline

void

start

()// 返回微秒

inline

uint64

stop

()          

private

:large_integer

freq

;large_integer

startcount

;large_integer

endcount;};

//納秒級

// 連續呼叫start和stop所需的時間大概是62ns

class

nanosecondtimer

//得到計算機啟動到現在的時鐘週期

static

inline

uint64

getcpucyclecount

(void)//

得到cpu

的頻率static

inline

double

calcpufrequency

()inline

void

start

()inline

uint64

stop

()inline

double

frequency

()private

:uint64

startt

;double

frequency

;  // mhz/s

};int

main

(int

argc

,char

*argv

)getchar

();return0;}

事實上在windows中每次呼叫**指令的時間都不穩定,所以這是很難真正的精確到納秒級的。windows下最多只能提供微秒級的精確度。

納秒與微秒的計算

秒的換算 ms 毫秒 s 微秒 ns 納秒 ps 皮秒 皮秒皮秒,符號ps 英語 picosecond 1皮秒等於一萬億分之一秒 10 12秒 1,000 皮秒 1納秒 1,000,000 皮秒 1微秒 1,000,000,000 皮秒 1毫秒 1,000,000,000,000 皮秒 1秒 納秒納...

時間單位的換算(秒,毫秒,微秒,納秒,皮秒)

秒 second 時間單位 s,毫秒 millisecond 時間單位 ms 微秒 microsecond 時間單位 s 1s 秒 1000ms 毫秒 1ms 毫秒 1000 s 微秒 1 s 微秒 1000ns 納秒 1ns 納秒 1000ps 皮秒 1秒 s 1000 毫秒 ms 1,000,0...

C 時間工具類 納秒,微秒,毫秒,秒,日期

1 找乙個比較全的時間工具類太難了,沒人總結啊 適用於linux include include include include include using std string linux高精度struct timespec 精確到納秒 和struct timeval 精確到微秒 class ti...