Qt线程之moveToThread
2017-08-18 15:09
204 查看
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
1.在mainwindow的添加成员:
QSubObj m_Obj;
QThread m_SubThread;
2.mainwindow构造函数中设置:
m_Obj.moveToThread(&m_SubThread);
m_SubThread.start();
3.mainwindow构造函数中绑定:
connect(&m_Obj,SIGNAL(Yoursignal()),this,SLOT(YourSlot()));
以后要想子线程向主线程中发消息,只需在子线程中使用emit Yoursignal()就可以了,当然,提到的信号和槽函数,都需要你来声明和实现的。
...........................................................................................................................................................................................
方法(3):
在Qt4.3(包括)之前,run 是虚函数,必须子类化QThread来实现run函数。而从Qt4.4开始,qthreads-no-longer-abstract ,run 默认调用 QThread::exec() 。这样一来不需要子类化 QThread 了,只需要子类化一个 QObject 就够了,这正是被 Bradley T. Hughes推荐的方法。
方法如下
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
方法(1):
1. 不使用事件循环。这是官方的 Manual 、example 以及相关书籍中都介绍的一种的方法。
a. 子类化 QThread
b. 重载 run 函数,run函数内有一个 while 或 for 的死循环
c. 设置一个标记为来控制死循环的退出。
这里的run函数自己执行了一个循环,不需要事件循环机制了。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
参考:http://www.cnblogs.com/findumars/p/6017830.html
参考来源:http://www.qtcn.org/bbs/read-htm-tid-63015-page-e.html#a
1.在mainwindow的添加成员:
QSubObj m_Obj;
QThread m_SubThread;
2.mainwindow构造函数中设置:
m_Obj.moveToThread(&m_SubThread);
m_SubThread.start();
3.mainwindow构造函数中绑定:
connect(&m_Obj,SIGNAL(Yoursignal()),this,SLOT(YourSlot()));
以后要想子线程向主线程中发消息,只需在子线程中使用emit Yoursignal()就可以了,当然,提到的信号和槽函数,都需要你来声明和实现的。
...........................................................................................................................................................................................
方法(3):
在Qt4.3(包括)之前,run 是虚函数,必须子类化QThread来实现run函数。而从Qt4.4开始,qthreads-no-longer-abstract ,run 默认调用 QThread::exec() 。这样一来不需要子类化 QThread 了,只需要子类化一个 QObject 就够了,这正是被 Bradley T. Hughes推荐的方法。
方法如下
QThread thread; Object obj; Dummy dummy; obj.moveToThread(&thread); QObject::connect(&dummy, SIGNAL(sig()), &obj, SLOT(slot())); thread.start();
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
方法(1):
1. 不使用事件循环。这是官方的 Manual 、example 以及相关书籍中都介绍的一种的方法。
a. 子类化 QThread
b. 重载 run 函数,run函数内有一个 while 或 for 的死循环
c. 设置一个标记为来控制死循环的退出。
这里的run函数自己执行了一个循环,不需要事件循环机制了。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
参考:http://www.cnblogs.com/findumars/p/6017830.html
参考来源:http://www.qtcn.org/bbs/read-htm-tid-63015-page-e.html#a
相关文章推荐
- Qt 的线程与事件循环——可打印threadid进行观察槽函数到底是在哪个线程里执行,学习moveToThread的使用)
- (转载)Qt 的线程与事件循环——可打印threadid进行观察槽函数到底是在哪个线程里执行,学习moveToThread的使用)
- Qt新建线程的方法(有QRunnable,QThreadPool,moveToThread和QtConcurrent的例子)
- 性能特性测试系列4——QT线程与std::thread(下)之QThread
- 理解QT线程中的moveToThread
- 性能特性测试系列3——QT线程与std::thread(上)之std::thread
- Qt:解决跨线程调用socket/IO类,导致报错的问题(socket notifiers cannot be enabled from another thread)
- QT线程出现错误Cannot create children for a parent that is in a different thread
- Qt中次线程里创建对象,出现Cannot create children for a parent that is in a different thread
- Qt中次线程里创建对象,出现Cannot create children for a parent that is in a different thread
- qt的QThread消息归属和MoveToThread的作用
- QT:moveToThread与信号与槽机制的第五个参数Qt::ConnectionType
- qt- thread —— 关于槽函数所在线程的问题
- 一起看代码来玩玩QT之20 Thread(线程)
- Qt线程QThread简析(8个线程等级,在UI线程里可调用thread->wait()等待线程结束,exit()可直接退出线程,setStackSize设置线程堆栈,首次见到Qt::HANDLE,QThreadData和QThreadPrivate)
- 在Qt使用moveToThread() qt的线程
- Qt 线程基础(Thread Basics的翻译,线程的五种使用情况)
- Qt 线程 ---movetothread
- Qt:用 __thread 关键字让每个线程有自己的全局变量
- Qt GUI程序中主线程与非主线程之间的通信