超時機制
時間是時間點,比如8:40:35超時,那麼獲得當前時間,如果小於等於該時間,則視爲超時。
添加超時事件
添加超時事件的時候,添加相對時間,比如8s後超時,在內部會進行處理,即取得當前時間,加上超時時間,得到超時時間點。
struct timeval tv;
tv.tv_sec = 10; /* 10秒後超時 */
tv.tv_usec = 0;
evtimer_set(&ev, time_cb, NULL);
event_add(ev, &tv);
時間段與時間點轉換
gettime(base, &now);
evutil_timeradd(&now, tv, &ev->ev_timeout);
取得當前時間now後,與用戶設置的相對時間(tv)相加,得到ev_timeout.
超時機制組織
通過一個小根堆,鍵值爲超時時間,這樣,每次檢測堆頂,查看是否有超時即可。