DSS加载module及和module交互的流程,如下:

(1)、DSS在fork子进程后调用StartServer启动服务

调用OS、OSThread、Socket、SocketUtils、QTSSDictionaryMap、

QTSServerInterface、QTSServer等类的Initialize函数进行初始化。

(2)、select_startevents函数

initialize the select() implementation ofthe event queue.

(3)、QTSServer::Initialize函数

继续调用QTSSModule、QTSServerPres、QTSSMessages、RTSPRequestInterface、

RTSPSessionInterface、RTPSessionInterface、RTPStream、RTSPSession、

QTSSFile、QTSSUserProfile等类的Initialize函数,进行dictionary的初始化。

加载了第一个模块QTSSErrorLogModule。

this->SetDefaultIPAddr()             //set default IP addr& DNS name

// begin listening,注意这里传的是false参数。

this->CreateListeners(false,fSrvrPrefs,inPortOverride)

(4)、TaskThreadPool::AddThreads(numThreads)              // numThreads为 1

到这里,第一个线程创建、运行、被添加到线程池里。

在startBroadcastRTSPSession函数里,又调用AddThreads函数在线程池里添加了一个线程。

(5)、TimeoutTask::Initialize()

Startup the server's global tasks, and start listening. The timeoutTask mechanism istask

based, we therefore mustdo this after adding task threads. This be done before starting

the sockets and servertasks.

sThread= NEW TimeoutTaskThread();

sThread->signal(Task::kStartEvent);

创建一个TimeoutTaskThread类对象,实际上这个类的名字容易产生混淆,它并不是一个线程类,而       是一个基于Task类的任务类。

因为前面已经在线程池里添加了一个任务线程,所以在这里调用signal的时候,就会找到这个线程,

并把事件加入到这个线程的任务队列里,等待被处理。(这时,刚才创建的线程应该也在

TaskThread::Entry函数里等待事件的发生)

(6)、IdleTask::Initialize()

// 创建并启动空闲任务线程

sIdleThread= NEW IdleTaskThread();              sIdleThread->Start();

(7)、Socket::StartThread()

// 启动Socket类的sEventThread类所对应的线程。sEventThread类在Socket::Initialize函数里创建

// 到目前为止,这已是第三个启动的线程,分别是任务线程、空闲任务线程、事务线程。

DSS 代码分析【启动、初始化流程】相关推荐

  1. Android博通BCM libbt-vendor.so 分析蓝牙初始化流程

    一. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍. 第二篇:Transp ...

  2. Pixhawk代码分析-启动代码及入口函数

    启动代码及入口函数 基础知识 关于坐标系 1)GeographicCoordinate System Represents position on earth with alongitude and ...

  3. Nginx源码分析-启动初始化过程(一)

    Nginx的启动初始化在src/core/nginx.c的main函数中完成,当然main函数是整个Nginx的入口,除了完成启动初始化任务以外,也必定是所有功能模块的入口之处.Nginx的初始化工作 ...

  4. fastboot启动初始化流程--基于MT6765

    概述 lk最主要的工作就是加载kernel和ramdisk,然后跳转到kernel中去执行. 同时有几个比较重要工作也是在lk中执行: a.初始化LCD,加载并显示开机logo. b.对启动模式判断, ...

  5. RIL层代码分析--拨号整个流程

    拨出电话流程: 1 在系统源码这个路径下/packages/apps/Phone/src/com/android/phone/DialtactsActivity.java contacts的andro ...

  6. 美颜sdk人脸美妆代码分析、算法流程

    美颜sdk人像美妆是非常重要的一个功能,目前深受广大用户喜爱,本篇文章小编将为大家讲解一下美颜sdk人像美妆功能的代码以及算法实现流程. 1.人像美妆算法流程 首先进行妆容模板制作,主要由Photos ...

  7. Linux启动芯片的初始代码,Linux系统初始化流程(简述)

    1,POST[power on self test]: 接通电源后,CPU通过出厂指定的存储地址读取代码[主板芯片上的ROM],然后测试内存,风扇,显示设备等是否正常,并通过BOIS的Boot Seq ...

  8. NFC源码分析之初始化流程

    Nfc的app代码位于: android/package/apps/Nfc/... 编译生成Nfc的apk和libnfc_nci_jni.so Nfc的协议栈和Hal相关的代码位于: system/n ...

  9. MediaPlayer代码分析(1)-初始化和设置数据的过程

    本文分析了android4.4.4的MediaPlayer的初始化和设置数据的过程 {"native_init",         "()V",         ...

最新文章

  1. nginx+FastCGI到底是谁影响超时时间
  2. linux内核kconfig objs,linux内核中Kconfig和Makefile 详解
  3. 搭建基于hyperledger fabric的联盟社区(九) --检索状态数据库
  4. glog日志库使用笔记
  5. NET问答: 是否有通用的方法判断一个 Type 是 Number ?
  6. 评价的等级优良差_满意程度等级划分
  7. SecureCRT的logon action登录跳转设置
  8. 解决Eclipse建Maven项目module无法转换为2.5
  9. CPU指令执行及流水线(超标量、多发射、乱序执行)
  10. yaahp层次分析法步骤_层次模型构造
  11. nodejs 异常的处理
  12. 大数据的核心价值是什么
  13. Mplayer SMplayer 软件配置
  14. badboy设置中文_badboy中文手册
  15. CentOS下安装cups实现局域网共享HP1020打印机
  16. Python教程(十)--if 实例运用(棒子老虎鸡游戏)
  17. Windows 10 自带App无法使用,打开闪退
  18. C语言_将 4×4 的数组逆时针旋转 90 度后输出
  19. 【项目】数仓项目(二)
  20. ruid+oracle,Timmy Trumpet《Oracle》[高品质音乐下载]

热门文章

  1. 计算机相关扩展活动战队名字,2020最新战队名字大全
  2. 【网络】IP地址计算
  3. 大连四六级培训百家外语国际部四六级考前冲刺关键在于词汇
  4. 7天内完成基础USB开发(2)——Pionway SDK简介
  5. macunity日志目录_Mac升级10.13需谨慎,Unity不显示资源的解决办法
  6. C#基础(10)——飞行棋游戏
  7. “交通·未来”第17期:深度出行感知,从出行需求预测到出行目的地预测
  8. Android 蓝牙开发——自动重连机制(十八)
  9. Fabric - chaincode开发模式
  10. 学习笔记——SDRAM学习