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

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推荐的方法。

方法如下
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐