您的位置:首页 > 编程语言 > Qt开发

Qt多线程相关<一>

2013-10-12 11:11 120 查看
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,今天先到这里,其中还有许多不明白的地方,以后有机会再写!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt thread connect