Live555 原始碼分析之延遲事件處理
live555的延遲事件
主要存放在BasicTaskScheduler0的成員變數
DelayQueue fDelayQueue;中
其中
DelayQueue 是 DelayQueueEntry的子類
DelayQueue 含有對延遲事件單元的增刪改查
DelayQueueEntry中有DelayInterval fDeltaTimeRemaining;//任務剩餘時間
但是DelayQueue 儲存的物件並不是DelayQueueEntry
而是AlarmHandler
AlarmHandler也是DelayQueueEntry的子類
AlarmHandler中有二個成員變數
TaskFunc* fProc;延遲事件到了以後需要執行的函式
void* fClientData;延遲函式的引數
檢測延遲函式是否到期是在SingleStep中
呼叫BasicTaskScheduler0中的
Synchronize()
該函式主要計算延遲佇列第一個元素有沒有到期
實際上每次有新的延遲任務加到佇列中的時候都會重新計算時間,每一項中fDeltaTimeRemaining都是與前一項的差值。延遲任務的執行函式是 fDelayQueue.handleAlarm();
延遲任務的新增是
scheduleDelayedTask(int64_t microseconds,TaskFunc* proc,void* clientData)函式
新增的時候會傳入需要等待的時間,回撥函式,回撥函式引數
以及新增到佇列哪個位置
返回延遲事件唯一標示
unscheduleDelayedTask(TaskToken& prevTask)
根據識別符號刪除延遲事件