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
//main.cpp
结果:
main thread: 0x1094
from thread slot: 0x1498
OK,今天先到这里,其中还有许多不明白的地方,以后有机会再写!!
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,今天先到这里,其中还有许多不明白的地方,以后有机会再写!!
相关文章推荐
- UGUI提高<一> Scroll View参数详解
- Java 结构体之 JavaStruct 使用教程<一> 初识 JavaStruct
- ubuntu10.04 AVD<一> 搭建环境
- Fragment学习进阶<一>-------静态
- Hbase shell <一>
- min3d引擎使用指南(Android)<一>
- MFC框架仿真<一>
- GL音乐播放器<一>---项目计划书
- AFNetworking源码<一>
- python challenge <一>
- IOS中系统唯一标识ID<一>
- 基于avd7181c解决视频输入效果差的问题<一>---驱动移植、调试手记
- WebService<一>
- Kafka组件研究<一>----组件介绍
- vueJs(2.x)+router+vuex简易博客系统<一>
- android之对话框<一>
- 解析#pragma指令<一>
- .Net开发理解篇<一>
- QModelIndex/Role/Model介紹<一>
- 进程和线程<一>