老熟女激烈的高潮_日韩一级黄色录像_亚洲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
主站蜘蛛池模板: 99爱在线视频这里只有精品 | 麻豆高清免费国产一区 | 天天天久久久 | 在厨房被C到高潮A毛片奶水 | 97人人做人人爱 | 亚洲国产欧美在线人成最新 | 狠狠婷婷综合久久久久久 | 久久一级黄色 | A毛片终身免费观看网站 | 无码人妻品一区二区三区精99 | 无码精品黑人一区二区三区 | 三年片在线观看免费动漫 | 国产亚洲精品美女在线 | 亚洲成人午夜精品 | 一区在线看| 亚洲国产97色在线张津瑜 | 亚洲6080yy久久无码国产 | 色欲av久久无码影院色戒 | 亚洲成人91 | 欧美搞逼视频 | 美国成人免费视频 | 亚洲不卡一区二区三区四区 | 亚洲视频在线a | 91精品久久香蕉国产线看观看 | 欧美精品尤物在线观看 | 欧美性视频在线播放 | 大地资源网在线观看免费高清观看 | 国产精品久久久久久久久久久久午夜片 | 欧美v国产v亚洲v日韩九九 | 91视频免费进入 | 久草久热 | 女人猛交| 国产免费中文字幕 | 久久伊甸园 | 亚洲一区二区三区在线网址 | 欧美日韩一区成人 | 黄色国产网站在线播放 | 天天曰夜夜操 | 欧美夜夜 | 女社长湿润丝袜在线观看 | 男人在线网站 |