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, 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 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464035.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第五节 CImage和CBmp(二)

由于这个库主要用于VC MFC下开发应用,因此目前可以下载到版本只支持MFC开发。如果您需要标准Win32的库,可以在回复时留下您的邮箱,或跟我联系。Email:wuchunlei163.comQQ:819543772EasyAnalysis图像分析库测试版以及源…

Linux 新系统易用性向 Windows 看齐

大家好,今天是一年一度的高考,不知道各位在多年以前有没有后悔选择电子专业,如果再给你一次机会,你会选择其他专业吗?以下是内容正文,由黄工整理!来源 | 网络嵌入式开发,很多工程师都…

深度剖析SOC高性能实时事件关联分析引擎

【引言】安全管理平台(SOC) 的一项关键技术就是事件关联分析。借助实时的事件关联分析引擎,安全管理平台能够发掘出复杂的海量安全日志和事件背后隐藏的信息,引导安全管理人员发现外 部***和内部违规行为。作为本系列的第五篇文章…

P3165 [CQOI2014]排序机械臂

传送门 就是说要维护一个数据结构资瓷区间反转和查询第\(K\)大,那么splay吧 我们可以把原数组按高度为第一关键字,下标为第二关键字排序,然后直接建出splay 这样的话每次第\(K\)大直接查询编号然后把它转到根节点,那么左子树大小1…

靠,嘉立创打板又降价

说个题外话,我前段时间和同事聊天,我同事是一个项目经理,我跟他说我有朋友在嘉立创,然后随口说了句,我们这个行业应该没有不知道嘉立创的吧,我同事回了一句,什么是嘉立创,然后我愣了…

动态提示的下拉框

<html> <head> <meta http-equiv"Content-Type" content"text/html; charsetgb2312"> <META content"fason,阿信" nameAuthor> <title>动态提示的下拉框</title> <style> a{color:red;text-decoratio…

深度解析Cocoa异步请求和libxml2.dylib教程(1)

深度解析Cocoa异步请求和libxml2.dylib教程是本文要介绍的内容&#xff0c;不多说&#xff0c;直接进入话题&#xff0c;很早就在cocoachina上看到这个框架了,今天终于有机会来使用这个东东了. 我这里写一下,如何往iphone项目中添加这个框架. 步骤如下: 1.下载该framework : ht…

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

着UDT::Startup()的启动&#xff0c;GC线程也随之运行了。 GC主要关注的就是UDTSocket的释放&#xff0c;下面我们来看看这个GC线程是怎么实现的。 查看源代码 打印帮助1 #ifndef WIN32 2 void* CUDTUnited::garbageCollect(void* p) 3 #else 4 DWORD WINAPI CUDTUnited:…

那年高考

每年高考&#xff0c;都会让我想起很多事情。我第一次高考前几天&#xff0c;我舅舅和舅娘过来看我&#xff0c;他们拉我到教室后门&#xff0c;我舅说我妈叮嘱他一定来看我&#xff0c;然后跟我说不要给自己太大压力&#xff0c;啰嗦了几分钟&#xff0c;要走的时候硬塞给我10…

vimdiff的简单使用

Vimdiff的使用 1、首先vimdiff是一款高效的文件的比较和合并的工具&#xff0c;它具有以下一些特点&#xff1a;命令行方式的比较工具&#xff1b;简单明了的界面&#xff1b;对比较出来的多处差异之间快速定位&#xff1b;进行文件合并。再使用vimdiff命令之前&#xff0c;我们…

拆解一个比亚迪的车钥匙,这个黑黑的元器件是什么?

今天抽屉突然找到一个比亚迪的车钥匙&#xff0c;寻思着没事拆开看看用什么方案做的。正面照&#xff0c;哪款车型的&#xff0c;不知道了背面照&#xff0c;很简洁&#xff0c;只有一个BYD的Logo接下来就是撬开了&#xff0c;过程非常顺利&#xff0c;之前撬开一个宝马车的钥匙…

分布式事物(同样适用于dubbo事务等分布式事务)

转载于:https://www.cnblogs.com/tian1993/p/10081901.html

一些web开发中常用的、做成cs文件的js代码 - 搜刮来的

using System;using System.Web;using System.Web.UI;namespace COCOWO.COMP{ /// <summary> /// 一些常用的Js调用 /// 创建时间&#xff1a;2006-8-3 /// 创建者&#xff1a;马先光 /// </summary> public class Jscript { …

库里扛起了勇士对凯尔特人的第四场

最近临近毕业季&#xff0c;有朋友这样说「我一定是要支持勇士的&#xff0c;毕竟库里和詹姆斯陪了整个大学四年啊」。昨晚上加班到11点半&#xff0c;到家洗完澡已经是凌晨1点了&#xff0c;那时候是想得很清楚的&#xff0c;明天是不想被其他事情打扰我看球赛的。这场比赛&am…

Nginx应用案例分享:压力测试

2019独角兽企业重金招聘Python工程师标准>>> 在运维工作中&#xff0c;压力测试是一项非常重要的工作。比如在一个网站上线之前&#xff0c;能承受多大访问量、在大访问量情况下性能怎样&#xff0c;这些数据指标好坏将会直接影响用户体验。 但是&#xff0c;在压力…

shell 判断文件是否存在,没有则创建

没有该文件则创建&#xff0c;有则 ls -l 输出文件信息。 #!/bin/bash echo "enter the name:" read filename if test -e $filename ; then ls -l $filename else touch $filename fi 输出 enter the name: sss.sh -rwxr-xr-x 1 root root 147 Dec 3 09:02 sss.sh …

声音是什么?

转自博客园《【秒懂音视频开发】02_重识声音》&#xff0c;https://www.cnblogs.com/mjios/p/14466418.html#5035688#!comments声音的产生声音&#xff08;Sound&#xff09;&#xff0c;是由物体的振动产生的。一切正在发声的物体都在振动。我们说话的时候&#xff0c;是声带在…

c#中的常用ToString()方法总结。

很多类都重写了ToString方法&#xff0c; 导致很多类的tostring到底执行了什么&#xff0c;有哪些参数&#xff0c;都不清楚。。。。很郁闷&#xff01;对于int&#xff0c;double等的tostring&#xff1a;C 货币 2.5.ToString("C") &#xffe5;2.50…

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

调用路线 UDT::cleanup()->CUDT::cleanup()->CUDTUnited::cleanup() 1 int CUDTUnited::cleanup() 2 { 3 // 锁保护 4 CGuard gcinit(m_InitLock); 5 6 // 如果还有实例运行&#xff0c;则到此为止了 7 if (--m_iInstanceCount > 0) 8 return 0; …

《星辰傀儡线》人物续:“灭世者”、“疯狂者”、“叛逆者”三兄妹

“灭世者”、“疯狂者”、“叛逆者”三兄妹&#xff1a;“灭世者”黑卡蒂&#xff1a;卡西欧家族的科技天才&#xff0c;沉默&#xff0c;不爱说话&#xff0c;一对亮闪闪的氪金眼&#xff0c;黑暗军团一战后&#xff0c;以“天空之镜”的设计者而闻名。柏拉图“理想国”的拥有…