上一節給大家從原始碼級別分析了SNetClient網路客戶端的實作程序,詳見?C++/Qt網路通訊模塊設計與實作(二),并給大家留了一個疑問,即引入SNetClientRunning類是為了解決什么問題?
我們從SNetClient的設計出發,即要求在執行緒里進行資料包的收發,連接,斷開處理等,這些處理不能在業務執行緒或者UI執行緒里進行,
說明
以下SNetClientRunning分析程序,我假定大家對信號槽連接型別(Qt::ConnectionType),發送信號的執行緒,接收者所依附的執行緒等都理解(這些屬于Qt的基本知識),
發送
-
使用方呼叫SNetClient Send函式
-
資料投遞到發送緩沖區,觸發信號通知有資料
-
SNetClient執行緒收到通知則往socket寫,從而把資料發送給對方;采用通知方式,非輪詢方式
發送信號的執行緒為非SNetClient執行緒,往對方發資料需在SNetClient執行緒進行,因此在進行信號槽連接時,接收者所依附的執行緒必須是SNetClient執行緒,信號槽連接代碼如下
connect(this, SIGNAL(SignalSend()), m_pNetClientRunning, SLOT(SlotSend()), Qt::QueuedConnection); //QueuedConnection
SNetClientRunning與SNetClient執行緒是什么關系?
詳細講解請點擊C++/Qt網路通訊模塊設計與實作(三)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/547348.html
標籤:其他
下一篇:使用LRU加速python應用
