#include <QtCore/QCoreApplication>
#include <QtCore/QThread>
#include <QtCore/QObject>
#include <QtCore/QDebug>
#include <QtCore/QElapsedTimer>
class InThreadObject : public QObject
{
Q_OBJECT
public:
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_OBJECT
public:
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();
}
Qt 线程通信样例
最新推荐文章于 2024-12-06 16:56:27 发布