UDT源码剖析(三):UDT::startup()过程代码注释
调用路线
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, false , false , 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()过程代码注释相关推荐
- pymavlink 源码剖析(二)之生成代码
文章目录 1 引言 2 C 代码生成 3 generate_one 函数分析 4 MAVTemplate 5 头文件生成 相关: pymavlink 源码剖析(一)之XML文件的数据解析 MAVLin ...
- UDT源码剖析(二):UDT自带例程recvfile注释
这几天学习了UDT自带的例子,结合源码进行了测试如下: #ifndef WIN32 #include <arpa/inet.h> #include <netdb.h> # ...
- fragment怎么获得上下文环境_Flask 源码剖析 (三):Flask 的上下文机制 (上)
写文章其实很费力,你的「在看」很重要. 前言 在面试 Python web 方面的工作时,如果你说自己阅读过 Flask 源码,那么 Flask 上下文机制的实现原理肯定会被问到,本篇文章就来剖析一下 ...
- UDT源码剖析(六):UDT::socket()过程代码注释
调用路线 UDT::socket()->CUDT::socket()->CUDTUnited::newSocket() 1 UDTSOCKET CUDT::socket(int af, i ...
- UDT源码剖析(四):UDT的GC线程相关过程代码注释
着UDT::Startup()的启动,GC线程也随之运行了. GC主要关注的就是UDTSocket的释放,下面我们来看看这个GC线程是怎么实现的. 查看源代码 打印帮助 1 #ifndef WIN32 ...
- UDT源码剖析(五):UDT::cleanup()过程代码注释
调用路线 UDT::cleanup()->CUDT::cleanup()->CUDTUnited::cleanup() 1 int CUDTUnited::cleanup() 2 { 3 ...
- MySQL · 引擎介绍 · Sphinx源码剖析(三)
在本节中我会介绍Sphinx在构建索引之前做的一些事情,主要是从mysql拉取数据保存,然后分词排序保存到内存等等一系列的操作.下面是几个相关指令 sql_query = \SELECT id, gr ...
- Muduo库源码剖析(三)——获取线程tid方法
相关知识点 __thread __thread修饰 表示使用 线程局部存储机制(threadlocal 机制) ,即会为修饰的变量在当前线程存储一份copy,别的线程是看不到这个变量的修改 __thr ...
- 源码解析 React Hook 构建过程
2018 年的 React Conf 上 Dan Abramov 正式对外介绍了React Hook,这是一种让函数组件支持状态和其他 React 特性的全新方式,并被官方解读为这是下一个 5 年 R ...
最新文章
- 【视频讲解】基础实验4-2.1 树的同构 (25 分)
- 美国硅谷预测10年后的世界,再不懂你就落伍了
- Maven的resources插件配置详解(含过滤器的配置详解)
- akka kafka java_当使用websocket连接时,使用akka-stream-kafka从kafka主题获取最后一条消息...
- MIP 与 AMP 合作进展(3月7日)
- SQL 2016 性能调优培训来了!!! 还免费!!!
- 游戏开发之C++继承与派生(包含访问控制)(C++基础)
- hdfs mv命令_Hdfs常用命令
- 梯度下降优化算法综述
- python kivy教程,Python Kivy 中文教程:安装(Windows)
- 9行代码制作一个简单的油猴插件
- 您的APP上架,遇到【安全评估报告】这道门槛了吗?
- 高斯正反算—投影坐标转大地坐标、大地坐标转投影坐标(附有完整代码及测试结果)
- 刻意练习(重点摘抄)
- 车载异构网络接入matlab,车载移动异构无线网络架构及关键技术
- 设计灵感:12个App的登录注册界面案例参考
- 0008基于单片机自动喂养控制系统设计
- 帝国CMS7.2 手机网站使用教程
- Python pandas库|任凭弱水三千,我只取一瓢饮(1)
- java 文件保存_java中怎么实现保存文件到本地
热门文章
- 国产毫米波雷达领域的领头羊,木牛科技将在明年量产77GHz汽车雷达
- android3.2以上切屏禁止onCreate()
- HDU 下沙的沙子有几粒
- java bean转map
- throws Exception的意思
- 学成在线--16.添加课程计划
- 解决:未能将管道连接到虚拟机: 所有的管道范例都在使用中。
- 【python】os模块 递归删除文件夹所有文件 --笔记
- 【python】错误、异常和文件---复习笔记
- php签入html出来的影响seo吗_搜索引擎优化_SEO必备6大技能+SEO误区讲解!