1. 程式人生 > >Live555 原始碼分析之延遲事件處理

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)

    根據識別符號刪除延遲事件