生活随笔
收集整理的這篇文章主要介紹了
UDT源码剖析(三):UDT::startup()过程代码注释
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
調用路線
UDT::startup()->CUDT::startup()->CUDTUnited::startup()
| 3 | ???return?CUDT::startup(); |
| 3 | ???return?s_UDTUnited.startup(); |
查看源代碼 打印幫助
| 1 | int?CUDTUnited::startup() |
| 3 | ????// 開啟一個臨時鎖,CGuard的運行機制就是在構造函數中啟動等待鎖信號,在析構中釋放鎖信號 |
| 4 | ????// 因此在本函數過程中會受到鎖的保護,函數運行結束,CGuard對象被釋放,鎖也就被釋放 |
| 6 | ???CGuard gcinit(m_InitLock); |
| 8 | ???// 保證只被啟動一次,注意使用后++是在判斷后才+1,基礎知識 |
| 9 | ???if?(m_iInstanceCount++ > 0) |
| 12 | ???// Global initialization code |
| 14 | ???// 這里兩個變量都是提供給WSAStartup的參數 |
| 15 | ???// 第一個wVersionRequested是Windows Sockets API提供的調用方可使用的最高版本號。 |
| 16 | ???//??? 低位字節(MAKEWORD第1個參數)指明主版本號,高位字節(MAKEWORD第2個參數)指出副版本(修正)號。 |
| 17 | ???// 第二個wsaData是指向WSADATA數據結構的指針,用來接收Windows Sockets實現的細節。這里沒有做什么特殊處理。 |
| 18 | ???// WSAStartup是winsock的初始化函數,對應的釋放函數是WSACleanup |
| 20 | ??????WORD?wVersionRequested; |
| 21 | ??????WSADATA wsaData; |
| 22 | ??????wVersionRequested = MAKEWORD(2, 2); |
| 24 | ??????if?(0 != WSAStartup(wVersionRequested, &wsaData)) |
| 25 | ?????????throw?CUDTException(1, 0,? WSAGetLastError()); |
| 28 | ???//init CTimer::EventLock |
| 30 | ???// 如果垃圾收集已經啟動,那么運行到這里就可以返回了 |
| 34 | ???// 啟動垃圾收集garbageCollect線程 |
| 35 | ???m_bClosing =?false; |
| 37 | ??????pthread_mutex_init(&m_GCStopLock, NULL); |
| 38 | ??????pthread_cond_init(&m_GCStopCond, NULL); |
| 39 | ??????pthread_create(&m_GCThread, NULL, garbageCollect,?this); |
| 41 | ??????m_GCStopLock = CreateMutex(NULL,?false, NULL); |
| 42 | ??????m_GCStopCond = CreateEvent(NULL,?false,?false, NULL); |
| 44 | ??????m_GCThread = CreateThread(NULL, 0, garbageCollect,?this, 0, &ThreadID); |
| 47 | ???m_bGCStatus =?true; |
總結
以上是生活随笔為你收集整理的UDT源码剖析(三):UDT::startup()过程代码注释的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。