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(); }
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(); }