老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

QT多發線程進行數據傳輸-創新互聯

平時的項目程序中,經常需要處理多個串口和網絡發送過來的數據,而且數據量還比較大,9600的波特率每秒鐘至少1000個字節的數據需要處理并反映到界面上,一開始直接和UI主線程同一個線程,在x86的機器上跑還沒問題,畢竟X86的機器最少主頻也不會低于1.6G,但是如果數據量再更大或者到了ARM上跑,直接UI卡住不動,想到的解決辦法就是用多線程,一個線程負責收數據,一個線程負責處理數據,當協議一樣的時候,如果需要將數據解析從串口改為網絡端口監聽的數據,以前的辦法是重新寫一個tcp通信進行處理,這個并不是非常合理的辦法,畢竟解析協議是一樣的,所以自己總結了一個通用的數據處理思路:各種數據接收后排隊的形式存入一個全局變量,單獨開辟一個線程從這個全局變量中讀取第一個數據,處理完則移除第一個數據,Qt中的鏈表直接提供了一個takeFirst函數,用起來非常爽!用while循環讀取,在讀取的時候加鎖,這樣的話就不會沖突了。
雛形:
全局變量文件:

在琿春等地區,都構建了全面的區域性戰略布局,加強發展的系統性、市場前瞻性、產品創新能力,以專注、極致的服務理念,為客戶提供成都網站建設、成都網站制作 網站設計制作按需定制網站,公司網站建設,企業網站建設,高端網站設計,全網營銷推廣,成都外貿網站建設,琿春網站建設費用合理。

復制代碼

  1. #ifndef APP_H

  2. #define APP_H

  3. #include "qstring.h"

  4. #include "qstringlist.h"

  5. class App

  6. {

  7. public:

  8.     static QStringList list;

  9. };

  10. #endif // APP_H

復制代碼

  1. #include "app.h"

  2. QStringList App::list=QStringList();

獨立處理數據線程:

復制代碼

  1. #ifndef TEST_H

  2. #define TEST_H

  3. #include "qthread.h"

  4. #include "qmutex.h"

  5. class Thread : public QThread

  6. {

  7.     Q_OBJECT

  8. public:

  9.     Thread();

  10.     ~Thread();

  11.     void stop();

  12. protected:

  13.     void run();

  14. private:

  15.     QMutex mutex;

  16.     volatile bool stopped;

  17. signals:

  18.     void readOne(QString txt);

  19. };

  20. #endif // TEST_H

復制代碼

  1. #include "thread.h"

  2. #include "app.h"

  3. Thread::Thread()

  4. {

  5. stopped=false;

  6. }

  7. Thread::~Thread()

  8. {

  9. }

  10. void Thread::stop()

  11. {

  12.     stopped=true;

  13. }

  14. void Thread::run()

  15. {

  16.     while(!stopped){

  17.         mutex.lock();

  18.         if (App::list.count()>0){

  19.             QString txt=App::list.takeFirst();

  20.             emit readOne(txt);

  21.         }

  22.         mutex.unlock();

  23.         msleep(1);//不加這句CPU占用率高達50%

  24.     }

  25.     stopped=false;

  26. }

主界面:

復制代碼

  1. #ifndef WIDGET_H

  2. #define WIDGET_H

  3. #include

  4. #include "thread.h"

  5. #include "qtimer.h"

  6. namespace Ui {

  7. class frmMain;

  8. }

  9. class frmMain : public QWidget

  10. {

  11.     Q_OBJECT

  12. public:

  13.     explicit frmMain(QWidget *parent = 0);

  14.     ~frmMain();

  15. private slots:

  16.     void writeOne();

  17.     void readOne(QString txt);

  18.     void on_btnAppend_clicked();

  19.     void on_btnThread_clicked();

  20.     void on_btnTimer_clicked();

  21. private:

  22.     Ui::frmMain *ui;

  23.     QTimer *timer;

  24.     Thread *thread;

  25. };

  26. #endif // WIDGET_H

復制代碼

  1. #include "frmmain.h"

  2. #include "ui_frmmain.h"

  3. #include "app.h"

  4. #include "qdatetime.h"

  5. #include "qdesktopwidget.h"

  6. #define _TIME_ qPrintable (QTime::currentTime().toString("now : hh:mm:ss:zzz"))

  7. frmMain::frmMain(QWidget *parent) :

  8.     QWidget(parent),

  9.     ui(new Ui::frmMain)

  10. {

  11.     ui->setupUi(this);

  12.     this->showMaximized();

  13.     timer=new QTimer(this);

  14.     timer->setInterval(50);

  15.     connect(timer,SIGNAL(timeout()),this,SLOT(writeOne()));

  16.     thread=new Thread;

  17.     connect(thread,SIGNAL(readOne(QString)),this,SLOT(readOne(QString)));

  18. }

  19. frmMain::~frmMain()

  20. {

  21.     delete ui;

  22. }

  23. void frmMain::writeOne()

  24. {

  25.     App::list.append(_TIME_);

  26. }

  27. void frmMain::readOne(QString txt)

  28. {

  29.     ui->txtOut->append(txt);

  30. }

  31. void frmMain::on_btnAppend_clicked()

  32. {

  33.     App::list.append(ui->txtIn->text());

  34. }

  35. void frmMain::on_btnThread_clicked()

  36. {

  37.     if (ui->btnThread->text()=="start thread"){

  38.         thread->start();

  39.         ui->btnThread->setText("stop thread");

  40.         ui->txtOut->append("start thread ok");

  41.     }else{

  42.         thread->stop();

  43.         ui->btnThread->setText("start thread");

  44.         ui->txtOut->append("stop thread ok");

  45.     }

  46. }

  47. void frmMain::on_btnTimer_clicked()

  48. {

  49.     if (ui->btnTimer->text()=="start timer"){

  50.         timer->start();

  51.         ui->btnTimer->setText("stop timer");

  52.         ui->txtOut->append("start timer ok");

  53.     }else{

  54.         timer->stop();

  55.         ui->btnTimer->setText("start timer");

  56.         ui->txtOut->append("stop timer ok");

  57.     }

  58. }

為了模擬大量數據,我這里開了50毫秒的定時器定時產生當前時間字符串的數據存入全局變量,然后放置了幾個按鈕用于手動添加字符串和開始停止線程及定時器。
QT多發線程進行數據傳輸

歡迎提出批評建議以及指點!謝謝!

另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


分享文章:QT多發線程進行數據傳輸-創新互聯
瀏覽路徑:http://www.xueling.net.cn/article/jdhco.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 女人被黑人躁得好爽视频 | 日韩欧美~中文字幕 | 337P日本欧洲亚洲大胆在线 | 国产成人无码VA在线观看 | 日本中文字幕精品 | 中文字幕无码不卡免费视频 | 日本aaa大片 | 日韩欧美一区二区三区免费看 | 日韩欧美一区二区三区不学 | 国产日韩一级 | 中文字幕一区佐久间英子 | 91社区国产在线观看 | 亚洲色偷偷偷综合网 | 亚洲一二三区不卡 | 波多野结衣高清一区二区三区 | 国产精品爽爽va在线观98 | 94欧美setu | 国产日产欧产精品精乱了派 | av影片在线播放 | a一区二区三区亚洲 | 欧美丰满少妇xxⅹ | 日本乱淫一区二区三区 | 少妇BWBWBWBWBWBW | av免费观看大全 | 午夜亚洲国产理论片无码片 | 又色又污又爽又黄的网站 | 超级av在线天堂东京热 | 国产精品a一| 她似遥上月短剧免费观看 | a级毛片黄 | 日本成本人片视频免费 | 天摸夜夜添久久精品亚洲人成 | 亚洲男女视频在线观看 | 成人性色生活片免费看 | 欧美一区二区大荫蒂 | 国产精品盗摄!偷窥盗摄 | 91视频网址 | 一级国产精品 | 高清一区在线观看 | 老司机午夜在线视频 | 亚洲sss视频在线视频 |