回覆列表
  • 1 # 使用者5100270516010

    1.單獨建立執行緒池,執行緒池中的所有工作執行緒從執行緒池任務佇列中讀取任務,啟動SOAP報文下發工作。   2.建立連線池,執行緒池中執行緒從連線池獲取一個連線將SOAP報文下發到網元上。   3.其他執行緒:SOAP報文讀取執行緒,將生成的SOAP報文檔案對映到記憶體檔案,每次讀取1w條資料到SOAP報文下發佇列,SOAP下發佇列資料結構進行   封裝,新增訊號量,每次資料push_back一條訊號量遞增   SOAP報文下發執行緒,獨立的執行緒從SOAP報文下發佇列中取資料,等待下發佇列的訊號,如果有訊號則從佇列中取資料,構建下發任務   將下發任務壓入執行緒池工作任務佇列,同時訊號量遞減1   SOAP報文儲存執行緒,SOAP報文下發後會收到網元的響應報文,解析模組分析響應報文,獲取SOAP傳送報文的執行結果,並將執行失敗   的SOAP報文進行儲存,對執行成功的報文寫入日誌。   4.連線池:連線池工廠,連線池,聯結器實體   連線池工廠建立連線池名稱和連線池例項的對映,管理所有連線池。   連線池管理所有會話連線(IOSession),建立空閒會話佇列和使用會話佇列,如果空閒佇列為空,同時又有新的連線請求,則建立一條新的連線。   連線數不能超過最大連線數,如果已經達到最大連線數,則進入等待狀態,當空閒佇列空狀態取消   AttachHttpHeader()//附加Http報頭   DetachHttpHeader()//獲取Http響應報頭   PraseHttpHeader();//解析Http響應報頭 http://www.cnpaf.net/Class/HTTP/200707/20984_2.html   佇列採用狀態模式,空閒狀態   佇列包含一個事件,型別轉換運算子到事件控制代碼,當空閒佇列為空時,事件變為無訊號狀態,當變為非空時變為有訊號狀態。每次出現這種狀況都要寫日誌資訊。   加鎖時要用自動鎖,將鎖包裝在一個區域性變數中,防止死鎖的發生。   CMultiLock包裝多個同步物件   CSingleLock包裝單個同步物件   CSingleLocksingleLock(&m_CritSection);//包裝一個臨界區   singleLock.Lock();//嘗試給共享資源加鎖   if(singleLock.IsLocked())//判斷共享資源是否被鎖住   {   //開始使用共享資源   //使用結束,釋放共享資源使用權   singleLock.Unlock();   }

  • 中秋節和大豐收的關聯?
  • ThanksToYou歌詞?