日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UDT源码剖析(三):UDT::startup()过程代码注释

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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()过程代码注释的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。