调用路线
UDT::startup()->CUDT::startup()->CUDTUnited::startup()

1 int startup()
2 {
3    return CUDT::startup();
4 }
1 int CUDT::startup()
2 {
3    return s_UDTUnited.startup();
4 }
查看源代码 打印帮助
1 int CUDTUnited::startup()
2 {
3     // 开启一个临时锁,CGuard的运行机制就是在构造函数中启动等待锁信号,在析构中释放锁信号
4     // 因此在本函数过程中会受到锁的保护,函数运行结束,CGuard对象被释放,锁也就被释放
5     // 保证了当前函数的线程安全
6    CGuard gcinit(m_InitLock);
7  
8    // 保证只被启动一次,注意使用后++是在判断后才+1,基础知识
9    if (m_iInstanceCount++ > 0)
10       return 0;
11  
12    // Global initialization code
13    // win32的全局初始化
14    // 这里两个变量都是提供给WSAStartup的参数
15    // 第一个wVersionRequested是Windows Sockets API提供的调用方可使用的最高版本号。
16    //    低位字节(MAKEWORD第1个参数)指明主版本号,高位字节(MAKEWORD第2个参数)指出副版本(修正)号。
17    // 第二个wsaData是指向WSADATA数据结构的指针,用来接收Windows Sockets实现的细节。这里没有做什么特殊处理。
18    // WSAStartup是winsock的初始化函数,对应的释放函数是WSACleanup
19    #ifdef WIN32
20       WORD wVersionRequested;
21       WSADATA wsaData;
22       wVersionRequested = MAKEWORD(2, 2);
23  
24       if (0 != WSAStartup(wVersionRequested, &wsaData))
25          throw CUDTException(1, 0,  WSAGetLastError());
26    #endif
27  
28    //init CTimer::EventLock
29  
30    // 如果垃圾收集已经启动,那么运行到这里就可以返回了
31    if (m_bGCStatus)
32       return true;
33  
34    // 启动垃圾收集garbageCollect线程
35    m_bClosing = false;
36    #ifndef WIN32
37       pthread_mutex_init(&m_GCStopLock, NULL);
38       pthread_cond_init(&m_GCStopCond, NULL);
39       pthread_create(&m_GCThread, NULL, garbageCollect, this);
40    #else
41       m_GCStopLock = CreateMutex(NULL, false, NULL);
42       m_GCStopCond = CreateEvent(NULL, falsefalse, NULL);
43       DWORD ThreadID;
44       m_GCThread = CreateThread(NULL, 0, garbageCollect, this, 0, &ThreadID);
45    #endif
46  
47    m_bGCStatus = true;
48  
49    return 0;
50 }

UDT源码剖析(三):UDT::startup()过程代码注释相关推荐

  1. pymavlink 源码剖析(二)之生成代码

    文章目录 1 引言 2 C 代码生成 3 generate_one 函数分析 4 MAVTemplate 5 头文件生成 相关: pymavlink 源码剖析(一)之XML文件的数据解析 MAVLin ...

  2. UDT源码剖析(二):UDT自带例程recvfile注释

    这几天学习了UDT自带的例子,结合源码进行了测试如下: #ifndef WIN32 #include <arpa/inet.h>    #include <netdb.h> # ...

  3. fragment怎么获得上下文环境_Flask 源码剖析 (三):Flask 的上下文机制 (上)

    写文章其实很费力,你的「在看」很重要. 前言 在面试 Python web 方面的工作时,如果你说自己阅读过 Flask 源码,那么 Flask 上下文机制的实现原理肯定会被问到,本篇文章就来剖析一下 ...

  4. UDT源码剖析(六):UDT::socket()过程代码注释

    调用路线 UDT::socket()->CUDT::socket()->CUDTUnited::newSocket() 1 UDTSOCKET CUDT::socket(int af, i ...

  5. UDT源码剖析(四):UDT的GC线程相关过程代码注释

    着UDT::Startup()的启动,GC线程也随之运行了. GC主要关注的就是UDTSocket的释放,下面我们来看看这个GC线程是怎么实现的. 查看源代码 打印帮助 1 #ifndef WIN32 ...

  6. UDT源码剖析(五):UDT::cleanup()过程代码注释

    调用路线 UDT::cleanup()->CUDT::cleanup()->CUDTUnited::cleanup() 1 int CUDTUnited::cleanup() 2 { 3 ...

  7. MySQL · 引擎介绍 · Sphinx源码剖析(三)

    在本节中我会介绍Sphinx在构建索引之前做的一些事情,主要是从mysql拉取数据保存,然后分词排序保存到内存等等一系列的操作.下面是几个相关指令 sql_query = \SELECT id, gr ...

  8. Muduo库源码剖析(三)——获取线程tid方法

    相关知识点 __thread __thread修饰 表示使用 线程局部存储机制(threadlocal 机制) ,即会为修饰的变量在当前线程存储一份copy,别的线程是看不到这个变量的修改 __thr ...

  9. 源码解析 React Hook 构建过程

    2018 年的 React Conf 上 Dan Abramov 正式对外介绍了React Hook,这是一种让函数组件支持状态和其他 React 特性的全新方式,并被官方解读为这是下一个 5 年 R ...

最新文章

  1. 【视频讲解】基础实验4-2.1 树的同构 (25 分)
  2. 美国硅谷预测10年后的世界,再不懂你就落伍了
  3. Maven的resources插件配置详解(含过滤器的配置详解)
  4. akka kafka java_当使用websocket连接时,使用akka-stream-kafka从kafka主题获取最后一条消息...
  5. MIP 与 AMP 合作进展(3月7日)
  6. SQL 2016 性能调优培训来了!!! 还免费!!!
  7. 游戏开发之C++继承与派生(包含访问控制)(C++基础)
  8. hdfs mv命令_Hdfs常用命令
  9. 梯度下降优化算法综述
  10. python kivy教程,Python Kivy 中文教程:安装(Windows)
  11. 9行代码制作一个简单的油猴插件
  12. 您的APP上架,遇到【安全评估报告】这道门槛了吗?
  13. 高斯正反算—投影坐标转大地坐标、大地坐标转投影坐标(附有完整代码及测试结果)
  14. 刻意练习(重点摘抄)
  15. 车载异构网络接入matlab,车载移动异构无线网络架构及关键技术
  16. 设计灵感:12个App的登录注册界面案例参考
  17. 0008基于单片机自动喂养控制系统设计
  18. 帝国CMS7.2 手机网站使用教程
  19. Python pandas库|任凭弱水三千,我只取一瓢饮(1)
  20. java 文件保存_java中怎么实现保存文件到本地

热门文章

  1. 国产毫米波雷达领域的领头羊,木牛科技将在明年量产77GHz汽车雷达
  2. android3.2以上切屏禁止onCreate()
  3. HDU 下沙的沙子有几粒
  4. java bean转map
  5. throws Exception的意思
  6. 学成在线--16.添加课程计划
  7. 解决:未能将管道连接到虚拟机: 所有的管道范例都在使用中。
  8. 【python】os模块 递归删除文件夹所有文件 --笔记
  9. 【python】错误、异常和文件---复习笔记
  10. php签入html出来的影响seo吗_搜索引擎优化_SEO必备6大技能+SEO误区讲解!