技術工作人員撰寫網狐底層代碼通信二次開發相關事項,今天解析ServerKernel中的IQueueService接口分析
根據底層結構分析的此圖:
在添數據加數據是處理如下數據庫圖:
在有相關的庫文件來處理執行相關的結構:
在執行過程中相關代碼展示:
1//開始服務
2bool __cdecl CQueueService::StartService()
3{
4 //效驗參數
5 ASSERT(m_bService==false);
6&線程池的七個參數nbsp;&nb數據漫遊是什麽意思sp; ASSERT(m_數據漫遊是什麽意思hCompletionPort==NULL);
7 ASSERT(m_pIQueueServiceSink!=NULL);
8
10 //! 需要追蹤一下這裏的完成端口句柄
11 //! 首先分析這裏的創建,IN線程撕裂者VALID消息免打擾_HANDLE_VALUE表示沒有關聯任何文件句柄,也就是
12 //! 說不存在某個實現某個操作完成以後系統自動給這個完成端口post一個完成消息的概念
13數據恢複軟件免費版 &nbs端口聚合p; //! 然隊列訓練口令後這裏用限制工作線程數是1,也就是同意時刻隻會有一條線程受到完成消息
14 m_端口轉發hCompletionPort=CreateIoCompletionPort(INVALID_HANDLE線程和進程的區别是什麽_VALUE,隊列隊形教案NULL,NULL,1);
15 數據透視表 if (m_hCompletionPort==NULL) throw TEXT(”隊列對象完成端口創建端口映射失敗”);
16
17&n隊列訓練bsp; //啓動線程
18 if (m_QueueServiceThread.InitThread(m_消息hCompletionPort)==false) throw TEXT(”隊列對象線程初始化失敗數據透視表“);
19 if (m_Que數據漫遊是什麽意思ueServiceThread.StartThead()==fals線程的幾種狀态e) throw TEXT(”隊列對象線程啓動失敗”);
20
21 //設置參數
22 m_bService=true;
23
24 return true;
25}m_Queu線程的幾種狀态eServiceThread.InitThrea消息免打擾是什麽意思d(m_hCompletionPort);是用于給完成端口句柄抛給了服務線程,能得到服務線程工作原理
//運行函數
bool CQueueServ數據iceThread::RepetitionRun()
{
//效驗參數
ASSERT(m_hCompletionPort!=NULL);
//變量定隊列研究義
DWORD dwTha數據庫ncfe隊列隊形口令rred=0;
OVERLAPPED pOverLapped=NULL;
CQueueService pQueueService=NULL;
//等待完成端隊列口
if (GetQueuedCompletionStatus(m_hCompletionPort,&dwThancferred,(PULONG_PTR)&pQueue端口映射Service,&數據分析師;pOverLapped,INFINITE))
線程是什麽意思{
//判斷退出
if (pQue端口是什麽意思ueService==NULL) retu數據透視表rn false;
//獲取數據
tagDataHe隊列訓練口令ad Data數據透視表Head;
bool bSuccess=pQueueS線程撕裂者ervice->線程數越多越好嗎;GetData(DataHead,m_cbBuffer,sizeof(m_cbBu隊列隊形教案ffer));
ASSERT(bSucc隊列訓練ess=數據分析=true);
//處理數據
if (bSuccess==true) pQueueService-&端口映射什麽意思gt;OnQueue數據分析師ServiceThread(DataHead,m_cbBuffer,DataH端口映射ead.wDataSize);
return true;
}
return false;
}執行處理原理過程在此:GetQueuedCompletionStatus(m_hCompletionPort,線程&dwThancferred(PULON線程數越多越好嗎G_PTR)&pQueueService,&pOverLapped,INFINITE)
m_hCompletionPort是通過線程參數傳遞線程的幾種狀态進來的,dwThancferred和pQueueService是在之前CQueueService::AddToQueue()中Post過來的參數,
數據經過完成端口在CQueueServiceThread繞一圈以後會回到CQueueService::OnQueueServ端口号怎麽查看iceThread()
//數據消息
void CQueueService::OnQueueServiceThread(const tagDataHead & DataHead, void pBuffer, WORD wData線程撕裂者Size)
{
ASSERT(m_pIQueueServiceSink!=NULL);
try
{
m_pIQueueServiceSink-&g端口映射什麽意思t;OnQueueServiceSink(隊列隊形口令DataHead.wIdentifier,pBuffer,DataHead.wDataSize,DataHead.dwIns線程池ertTime);
}
catch () {}
return;
}
這樣隊列服務就完成了他的使命,将執行的消息,異步的交給指定接口去處理,用一句話來描述QueueService模塊就是:将隊列的插入和處理通過關聯到完成端口上以實現在IOCP線程池管理下異步處理;Add以後投遞完成消息,在完成端口上監聽的線程受到消息以後讀取數據并處理; 找,還的選擇專業開發商,科技。
網狐6603棋牌ServerKernel中的IQueueService接口分析原文鏈接:https://qipaiyuanmaxiazai.com/12289.html,轉載請注明出處~~~
評論0