Qt 线程通信样例

#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();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值