QT 線程池 + TCP 小試(三)實現最終功能


*免分資源鏈接點擊打開鏈接http://download.csdn.net/detail/goldenhawking/4492378

      有了TCP、線程池,我們就可以把他們連接起來。使用最簡單的 QMainWindow吧,設計個UI,而后,創建我們的線程池、Service,並把TcpService 的數據接收信號與線程池的數據處理信號連接起來。

      為了模擬處理任務,我們簡單的設計一個轉換大小寫字符的函數作為處理過程的模擬,這樣有利於在超級終端調試、模擬。

 

[cpp]  view plain  copy
 
  1. #ifndef MYTASKITEM_H  
  2. #define MYTASKITEM_H  
  3.   
  4. #include "qghthreadtaskitem.h"  
  5.   
  6. class MyTaskItem : public QGHThreadTaskItem  
  7. {  
  8.     Q_OBJECT  
  9.   
  10. public:  
  11.     MyTaskItem(QObject *parent);  
  12.     ~MyTaskItem();  
  13.   
  14. public:  
  15.     virtual void run(QObject * task_source, const QByteArray & data_array);  
  16.   
  17. signals:  
  18.     void evt_SendData(QObject * objClient,const QByteArray & dtarray);  
  19. };  
  20.   
  21. #endif // MYTASKITEM_H  


上述的類中的信號用來把處理結果發回生產者(也可以是別的消費者,取決於信號的連接)

 

 

[cpp]  view plain  copy
 
  1. void MyTaskItem::run(QObject * task_source, const QByteArray & data_array)  
  2. {  
  3.     QByteArray res;  
  4.     foreach (char c,data_array)  
  5.     {  
  6.         res.push_back((c>='a'&& c<='z')?c+('A'-'a'):c);  
  7.         if (c==015)  
  8.             res.push_back(012);  
  9.   
  10.     }  
  11.     emit evt_SendData(task_source,res);  
  12.     return ;  
  13. }  


簡單的大小寫轉換,以及為了超級終端設置的換行符格式轉換。為了模擬吃力的運算時間,我們加上一個sleep

 

 

[cpp]  view plain  copy
 
  1. void MyTaskItem::run(QObject * task_source, const QByteArray & data_array)  
  2. {  
  3.     QByteArray res;  
  4.     foreach (char c,data_array)  
  5.     {  
  6.         res.push_back((c>='a'&& c<='z')?c+('A'-'a'):c);  
  7.         if (c==015)  
  8.             res.push_back(012);  
  9.   
  10.     }  
  11.     _sleep (50);  
  12.     emit evt_SendData(task_source,res);  
  13.     return ;  
  14. }  



 

具體工程參見我的資源, _sleep 在資源中並沒有加上。

上幾個圖,首先是服務端的配置,

設置端口、線程數、是否為每個客戶端發來的數據包保持FIFO,以及發回消費者時載荷的大小。而后,啟動,運行客戶端連接

客戶端是一個模擬程序,會模擬N個連接發送數據。當然,在XP下一個程序只許開10個連接。

------------------------------------------

對沒有安裝VC2010的Windows用戶,可以用命令行編譯,具體方法。

1、打開QT的命令行

進入文件夾,用命令編譯服務端

而后編譯客戶端

生成的文件在 Debug 和 Release了

如果提示找不到QT的DLL,則可以設置系統路徑到QT/BIN

 

http://blog.csdn.net/goldenhawking/article/details/7854635


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM