Qt多线程相关<一>

Refrence By:

http://www.cppblog.com/bitdewy/archive/2012/05/28/176553.html;

http://mobile.51cto.com/symbian-268690.htm;


更详细的深入讲解见参考:


最近遇到跨线程间信号槽的使用,终于找到一个较理想的解决方案,后续再深入学习其中的事件循环相关,这地方个人觉得才是信号槽或跨线程的精髓!


进入正题:


一般会遇到这样的问题,即在主线程中有些东西不方便处理,需要交给次级线程,这地方就需要用到信号槽机制,


connect(this,SIGNAL(),&thread,SLOT());


但是通常会遇到的问题是,sender和reciver的线程依附性一般都是相同的,该怎么处理呢?百思不得其解,没想到解决方案如此简单,就是将主线程不方便处理的


工作交给QObject的一个子类Child,然后将Child的线程依附性改变,类似如下:


Child::QObject

{

public slots:

dowork(){};

}

thread::QThread()

{
}

然后,Child.moveToThread(&thread);


各种玄机,请看代码


//mytest.h

#include <QtCore/QCoreApplication>   
#include <QtCore/QObject>   
#include <QtCore/QThread>   
#include <QtCore/QDebug>    
class Dummy : public QObject
{       
	Q_OBJECT   
public: 
	Dummy(QObject* parent=0):QObject(parent)
	{};   
public slots: 
	void emitsig()
	{        
		emit sig();       
	} 
signals: 
	void sig(); 
};    

class Object : public QObject 
{       
	Q_OBJECT   
public: 
	Object(){};
public slots:
	void slot() 
	{    
		qDebug()<<"from thread slot:" <<QThread::currentThreadId();       
	}   
}; 

//main.cpp


#include "mytest.h" 

int main(int argc, char *argv[]) 
{      
	QCoreApplication a(argc, argv);       
	qDebug()<<"main thread:"<<QThread::currentThreadId();      
	QThread thread;       
	Object obj;       
	Dummy dummy;       
	obj.moveToThread(&thread);      
	QObject::connect(&dummy, SIGNAL(sig()), &obj, SLOT(slot()));      
	thread.start();       
	dummy.emitsig();       
	return a.exec();
}

结果:


main thread: 0x1094 

from thread slot: 0x1498


OK,今天先到这里,其中还有许多不明白的地方,以后有机会再写!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值