由於reactor
在各個平台的預設實現都取決於平台的實現,比如在
windows
下預設的
reactor
是wfmo_reactor
,而在linux
和unix
平台,預設的
reactor
是select_reactor,
而reactor
的實現往往取決於使用的反應器底層實現,而這些反應器的時間精度就決定了你的定時器的時間精度。下表大致反饋了一些常用的定時器的實現。
表1 常用raactor
的實現reactor
反應器的底層實現
時間精度
ace_select_reactor
select
函式使用
struct timeval
結構進行超時處理
; timeval
結構可以精確倒微秒。
dev_poll_reactor
poll
或者而epoll
timeout
引數的單位是毫秒。
ace_wfmo_reactor
waitformultipleobjects
dwmilliseconds
的引數單位是毫秒
不過作為伺服器的開發,我倒想不出什麼地方需要精確到
0.1s
定時器的地方,了解一下差異性就足夠了。
定時器的精度問題
摘自羅雲彬的 win32彙編教程 由於windows的定時器同樣是基於時鐘中斷的,所以雖然引數的單位是ms,但精度還是55 ms,如果指定乙個小於55 ms的週期,不管是1 ms還是54 ms,windows最快也只能在每個時鐘中斷的時候觸發這個定時器,也就是說,實際上這個定時器是以55 ms為觸發...
C 高精度定時器
ktimer.h windows graphics programming win32 gdi and directdraw feng yuan publisher prentice hall ptr first edition december 01,2000 高精度納秒計時器,最後修改 2008...
C 高精度定時器
windowsgraphicsprogrammingwin32gdianddirectdraw fengyuan publisher prenticehallptr firsteditiondecember01,2000 高精度納秒計時器,最後修改 usage intmain pragmaonce ...