青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

zhonghua

C++博客 首頁 新隨筆 聯系 聚合 管理
  72 Posts :: 1 Stories :: 4 Comments :: 0 Trackbacks

        昨晚在一個郵件列表里面看見一個關于在線程種使用signal/slot的討論,由于回復太多,這里就不貼出原文了。

        主要是關于怎樣從一個線程發送信號到另外一個線程的問題。其實這個也不是什么復雜的問題,在qt的asstant里面已經描訴的比較清楚了。當我們鏈接信號的時候使用qt::queuedConnection就能使slot在它自己的線程里面運行。

        另我驚訝的是在其中一個的回復種他給出了一些資料,其中一個名為you‘ar doing it wrong。帖子是英文的,由于英文水平有限,加上他所說的使用QT thread的方式和我們平時直接派生QThread實現run函數的方式不一樣,所以讓我看的非常含糊,甚至到了不清不楚的地步。看了后面的大量的回復和討論,勉強明白了它的意思。

    具體請看這里
http://labs.qt.nokia.com/2010/06/17/youre-doing-it-wrong/

       在那里他提出了一種新的使用QThread的方式,其實也不算是信了,據說qt 4.4就已經有了。那就是QObject::moveToThread。根據QT的asstant的描述,moveToThread的作用是把一個QOject移動到一個線程里面去,那么它到底是什么意思呢。我的理解就是當我們調用QObject的moveToThread方法之后,我們這個派生自QObject的類的代碼就會在新的線程里面執行。而那篇文章所說的就是大多數對這個函數產生了誤解,人們總是在派生的QThread的類的構造函數里面調用moveToThread(this)以希望把該類的所有函數都在該線程里面執行。這樣是錯誤的。

         今天為了驗證這個方法到底有什么用,寫了一些代碼來做測試。

1、

   

  1. #include <QObject>  
  2. #include <QDebug>  
  3. #include <QThread>  
  4.   
  5. class MyObject : public QObject {  
  6.     Q_OBJECT  
  7.     public:  
  8.         MyObject() {};  
  9.         ~MyObject() {}  
  10.   
  11.     public slots:  
  12.         void first() {  
  13.             qDebug() << QThread::currentThreadId();  
  14.         }  
  15.         void second() {  
  16.             qDebug() << QThread::currentThreadId();  
  17.         }  
  18.         void three() {  
  19.             qDebug() << QThread::currentThreadId();  
  20.         }  
  21. };  

2、mainwindow.cxx

  1. #include "mainwindow.h"  
  2. #include <QPushButton>  
  3. #include <QVBoxLayout>  
  4. #include "myobject.h"  
  5.   
  6. MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {  
  7.     my = new MyObject;  
  8.     firstButton = new QPushButton(tr("first"), 0);  
  9.     connect(firstButton, SIGNAL(clicked()), my, SLOT(first()), Qt::QueuedConnection);  
  10.     secondButton = new QPushButton(tr("second"), 0);  
  11.     connect(secondButton, SIGNAL(clicked()), my, SLOT(second()), Qt::QueuedConnection);  
  12.     threeButton = new QPushButton(tr("three"), 0);  
  13.     connect(threeButton, SIGNAL(clicked()), my, SLOT(three()), Qt::QueuedConnection);  
  14.     selfButton = new QPushButton(tr("self"), 0);  
  15.     connect(selfButton, SIGNAL(clicked()), this, SLOT(onSelfPushed()));  
  16.     exitButton = new QPushButton(tr("exit"), 0);  
  17.     connect(exitButton, SIGNAL(clicked()), this, SLOT(onExitPushed()));  
  18.   
  19.     QVBoxLayout *layout = new QVBoxLayout;  
  20.     layout->addWidget(firstButton);  
  21.     layout->addWidget(secondButton);  
  22.     layout->addWidget(threeButton);  
  23.     layout->addWidget(selfButton);  
  24.     layout->addWidget(exitButton);  
  25.   
  26.     QWidget *p = new QWidget;  
  27.     p->setLayout(layout);  
  28.   
  29.     QThread *thread = new QThread;  
  30.     my->moveToThread(thread);  
  31.   
  32.     thread->start();  
  33.     connect(thread, SIGNAL(started()), my, SLOT(first()));  
  34.   
  35.     setCentralWidget(p);  
  36. }  
  37.   
  38. MainWindow::~MainWindow() {  
  39. }  
  40.   
  41. void MainWindow::onFirstPushed() {  
  42.     my->first();  
  43. }  
  44.   
  45. void MainWindow::onSecondPushed() {  
  46.     my->second();  
  47. }  
  48.   
  49. void MainWindow::onThreePushed() {  
  50.     my->three();  
  51. }  
  52.   
  53. void MainWindow::onSelfPushed() {  
  54.     qDebug() << QThread::currentThreadId();  
  55. }  
  56.   
  57. void MainWindow::onExitPushed() {  
  58.     close();  
  59. }  

    通過測試,在mainwidow.cxx使用上面的代碼的時候,由于my調用了movetothread函數,那么它所有的槽函數都是執行在新開辟的線程里面。

   如果去掉moveToThread函數,那么所有的函數都將執行在gui線程里面。

   同時為了測試connect的第五個參數,在connect的時候可以將Qt::QueuedConnection修改為Qt::DirectConnection,這樣所有的槽函數也將在主線程里面執行。

     最后要注意的是,如果上面connect的時候連接的是this的onXXXXXX槽函數再來調用的my的槽函數的話,那么這些槽函數也將執行在onXXXXX槽函數所在的線程,這里是主線程。

     通過上面的測試,我們在使用線程的時候,就可以將一個類派生自QObject,然后實現所有的signal/slot,然后通過調用movetothread函數來使他們執行在新的線程里面,而不是每次都要重新派生QThread,并且派生QThread函數的另外一個不好的地方是只有run函數內部的代碼才會執行在新線程里面,相比起來,派生QObject并使用movetothread函數更具有靈活性。

    最后,把討論中列出的所有的網址列出來哈。

posted on 2013-12-11 17:08 米米 閱讀(907) 評論(0)  編輯 收藏 引用 所屬分類: qt
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩直播| 亚洲精品欧美激情| 亚洲韩国精品一区| 欧美成人精品在线播放| 亚洲精品三级| 欧美在线视屏| 亚洲国产精品一区二区尤物区| 欧美不卡视频一区发布| 正在播放亚洲| 每日更新成人在线视频| 日韩网站免费观看| 国产精品一区二区三区久久| 久久精品视频在线免费观看| 亚洲人成网站在线播| 亚洲欧美日韩国产成人精品影院 | 亚洲一区二区三区四区五区黄| 国产精品一级在线| 每日更新成人在线视频| 亚洲天天影视| 免费亚洲网站| 西瓜成人精品人成网站| 亚洲欧洲日本专区| 国产精品一区二区久久| 欧美国产日韩一二三区| 亚洲欧美日韩国产中文在线| 亚洲国产99| 久久久91精品国产| 国产精品99久久久久久久久| 国内免费精品永久在线视频| 欧美日韩亚洲三区| 久久久欧美精品sm网站| 在线亚洲欧美视频| 亚洲国产精品高清久久久| 久久精品日韩一区二区三区| 99综合电影在线视频| 伊人久久大香线| 国产视频丨精品|在线观看| 欧美久久久久| 嫩草成人www欧美| 久久精品视频在线播放| 亚洲女女做受ⅹxx高潮| 日韩一级免费观看| 欧美激情一区二区三区| 久久精品在线免费观看| 亚洲欧美视频在线| 一区二区三区四区国产| 日韩视频国产视频| 亚洲福利视频一区二区| 国内精品久久久久久久影视麻豆| 国产精品国产三级国产专播品爱网| 欧美另类videos死尸| 欧美不卡视频一区| 蜜桃av一区二区三区| 久久久在线视频| 欧美一区二区三区免费在线看| 亚洲午夜电影| 亚洲一区综合| 亚洲一区在线观看免费观看电影高清| 99视频精品在线| 亚洲乱码国产乱码精品精98午夜| 亚洲国产精品传媒在线观看| 欧美激情国产日韩精品一区18| 老鸭窝91久久精品色噜噜导演| 久久久国际精品| 久久久久久9| 久久香蕉国产线看观看网| 久久久噜噜噜| 免费一区视频| 亚洲国产成人精品女人久久久| 欧美韩国日本一区| 亚洲国产一区二区a毛片| 欧美激情亚洲国产| 亚洲精品1区2区| 亚洲人成人99网站| 在线亚洲高清视频| 亚洲欧美国产制服动漫| 欧美伊久线香蕉线新在线| 久久精品免费电影| 麻豆av福利av久久av| 欧美激情乱人伦| 欧美无乱码久久久免费午夜一区| 欧美午夜免费电影| 国产欧美日本在线| 激情综合在线| 亚洲精品久久久蜜桃| 中国女人久久久| 欧美一区激情| 欧美成人dvd在线视频| 亚洲国产婷婷综合在线精品| 一区二区三区四区国产| 欧美一区二区三区另类| 六十路精品视频| 欧美日韩国产精品专区| 国产农村妇女精品| 亚洲高清视频一区| 亚洲少妇一区| 久久久国产一区二区| 亚洲高清视频在线观看| 在线一区视频| 久久久av毛片精品| 欧美人与性禽动交情品 | 国产日韩欧美一区二区三区在线观看 | 久久国产手机看片| 欧美激情第9页| 亚洲自拍三区| 欧美成人国产| 国产欧美一区二区三区另类精品| 亚洲福利视频一区| 亚洲欧美制服另类日韩| 欧美福利在线观看| 亚洲欧美精品伊人久久| 欧美福利一区| 国产午夜精品福利| 99视频精品免费观看| 久久精品免费播放| 日韩视频一区二区三区在线播放免费观看| 亚洲伊人久久综合| 欧美精品免费视频| 一区二区三区在线观看欧美| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 国产精品欧美久久久久无广告| 黄色在线成人| 亚洲欧美在线免费观看| 亚洲国产一区在线观看| 午夜精品久久久久久久| 欧美日本亚洲| 亚洲电影天堂av| 久久国产精品72免费观看| 亚洲毛片播放| 免费在线看成人av| 韩国福利一区| 性欧美暴力猛交另类hd| 亚洲另类一区二区| 麻豆精品网站| 在线观看久久av| 久久国产精品久久精品国产| 亚洲最新在线| 欧美日韩视频在线| 亚洲美女在线国产| 欧美激情91| 久久久久亚洲综合| 国内免费精品永久在线视频| 欧美一区二区三区四区在线观看地址| 亚洲精品国产精品久久清纯直播| 久久久国际精品| 国产一区二区三区在线观看网站| 午夜精品久久久久久久白皮肤 | 欧美一区二区高清在线观看| 国产精品极品美女粉嫩高清在线 | 亚洲国产精品va在线看黑人| 久久阴道视频| 亚洲电影免费观看高清| 免费成人美女女| 久久久久久精| 亚洲成人原创| 欧美国产免费| 免费观看日韩| 亚洲欧洲精品一区二区三区| 欧美va亚洲va国产综合| 久热精品视频在线观看一区| 亚洲第一精品福利| 欧美激情视频在线免费观看 欧美视频免费一 | 国产日本欧美一区二区三区| 久久精品国产欧美亚洲人人爽 | 欧美高清一区| 99视频热这里只有精品免费| 亚洲作爱视频| 国产老女人精品毛片久久| 久久激情视频免费观看| 欧美亚洲免费| 尤物九九久久国产精品的分类| 欧美激情aⅴ一区二区三区| 欧美aaaaaaaa牛牛影院| 99国产精品久久久久久久久久| av成人天堂| 国产欧美日韩综合| 久久久午夜电影| 免费人成精品欧美精品| 亚洲精品一区二区三区樱花 | 狠狠狠色丁香婷婷综合激情| 免费成人黄色片| 欧美日本一区二区高清播放视频| 亚洲视频免费在线| 欧美一级专区免费大片| 亚洲黄色在线看| 一本久久a久久免费精品不卡| 国产精品视频午夜| 免费在线播放第一区高清av| 欧美日韩一区二| 久久精品国产99| 欧美高清在线| 欧美一区二区三区精品电影| 久久综合色天天久久综合图片| 亚洲特黄一级片| 欧美在线亚洲| 在线视频欧美一区| 久久久久国产精品一区| 一区二区免费在线观看| 欧美一区二区网站| 99热免费精品|