Qt 线程通信样例

来源:互联网 发布:tensorflow下载教程 编辑:程序博客网 时间:2024/05/20 11:25
#include <QtCore/QCoreApplication>#include <QtCore/QThread>#include <QtCore/QObject>#include <QtCore/QDebug>#include <QtCore/QElapsedTimer>class InThreadObject : public QObject{Q_OBJECTpublic:InThreadObject(QObject * parent):QObject(parent){}~InThreadObject(){}protected slots:void StartWork(){int i=0;while (i<10){i++;qDebug()<<QString("Current number is:").arg(i)<<" ==> QThread is:"<<QThread::currentThreadId();}emit EmitFinished();}void FinishedThread(){QThread::currentThread()->quit();}signals:void EmitFinished();};class OutThreadObject: public QObject{Q_OBJECTpublic:OutThreadObject(QObject * parent):QObject(parent){}~OutThreadObject(){}void StartThreadObj(){emit CallStart();}protected slots:void EmitFinishedToThread(){qDebug()<<"I received the thread is completed, I should call it finished"<<QThread::currentThreadId();emit CallFinished();}signals:void CallFinished();void CallStart();};class MyThread : public QThread{public:MyThread(QObject * parent):QThread(parent){}void run(){exec();}};#include "main.moc"int main(int argc, char *argv[]){QCoreApplication a(argc, argv);MyThread thread(&a);InThreadObject * inObj = new InThreadObject(0);OutThreadObject * outObj = new OutThreadObject(0);QObject::connect(inObj, SIGNAL(EmitFinished()), outObj, SLOT(EmitFinishedToThread()));QObject::connect(outObj, SIGNAL(CallFinished()), inObj, SLOT(FinishedThread()));QObject::connect(outObj, SIGNAL(CallStart()), inObj, SLOT(StartWork()));inObj->moveToThread(&thread);thread.start();outObj->StartThreadObj();return a.exec();}
原创粉丝点击