QT 线程池 + TCP 小试(三)实现最终功能
生活随笔
收集整理的這篇文章主要介紹了
QT 线程池 + TCP 小试(三)实现最终功能
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上述的類中的信號用來把處理結果發回生產者(也可以是別的消費者,取決于信號的連接) void MyTaskItem::run(QObject * task_source, const QByteArray & data_array) {QByteArray res;foreach (char c,data_array){res.push_back((c>='a'&& c<='z')?c+('A'-'a'):c);if (c==015)res.push_back(012);}emit evt_SendData(task_source,res);return ; }
簡單的大小寫轉換,以及為了超級終端設置的換行符格式轉換。為了模擬吃力的運算時間,我們加上一個sleep void MyTaskItem::run(QObject * task_source, const QByteArray & data_array) {QByteArray res;foreach (char c,data_array){res.push_back((c>='a'&& c<='z')?c+('A'-'a'):c);if (c==015)res.push_back(012);}_sleep (50);emit evt_SendData(task_source,res);return ; }
*免分資源鏈接點擊打開鏈接http://download.csdn.net/detail/goldenhawking/4492378
????? 有了TCP、線程池,我們就可以把他們連接起來。使用最簡單的 QMainWindow吧,設計個UI,而后,創建我們的線程池、Service,并把TcpService 的數據接收信號與線程池的數據處理信號連接起來。
????? 為了模擬處理任務,我們簡單的設計一個轉換大小寫字符的函數作為處理過程的模擬,這樣有利于在超級終端調試、模擬。
#ifndef MYTASKITEM_H #define MYTASKITEM_H#include "qghthreadtaskitem.h"class MyTaskItem : public QGHThreadTaskItem {Q_OBJECTpublic:MyTaskItem(QObject *parent);~MyTaskItem();public:virtual void run(QObject * task_source, const QByteArray & data_array);signals:void evt_SendData(QObject * objClient,const QByteArray & dtarray); };#endif // MYTASKITEM_H上述的類中的信號用來把處理結果發回生產者(也可以是別的消費者,取決于信號的連接) void MyTaskItem::run(QObject * task_source, const QByteArray & data_array) {QByteArray res;foreach (char c,data_array){res.push_back((c>='a'&& c<='z')?c+('A'-'a'):c);if (c==015)res.push_back(012);}emit evt_SendData(task_source,res);return ; }
簡單的大小寫轉換,以及為了超級終端設置的換行符格式轉換。為了模擬吃力的運算時間,我們加上一個sleep void MyTaskItem::run(QObject * task_source, const QByteArray & data_array) {QByteArray res;foreach (char c,data_array){res.push_back((c>='a'&& c<='z')?c+('A'-'a'):c);if (c==015)res.push_back(012);}_sleep (50);emit evt_SendData(task_source,res);return ; }
具體工程參見我的資源, _sleep 在資源中并沒有加上。
上幾個圖,首先是服務端的配置,
設置端口、線程數、是否為每個客戶端發來的數據包保持FIFO,以及發回消費者時載荷的大小。而后,啟動,運行客戶端連接
客戶端是一個模擬程序,會模擬N個連接發送數據。當然,在XP下一個程序只許開10個連接。
------------------------------------------
對沒有安裝VC2010的Windows用戶,可以用命令行編譯,具體方法。
1、打開QT的命令行
進入文件夾,用命令編譯服務端
而后編譯客戶端
生成的文件在 Debug 和 Release了
如果提示找不到QT的DLL,則可以設置系統路徑到QT/BIN
總結
以上是生活随笔為你收集整理的QT 线程池 + TCP 小试(三)实现最终功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 访问进程环境变量environ时的一个坑
- 下一篇: 深入理解计算机的字长