qt 线程接收线程 moveToThread 特性

Posted qianbo_insist

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt 线程接收线程 moveToThread 特性相关的知识,希望对你有一定的参考价值。

qt 线程槽函数

假定一个线程继承QThread,那么这个线程的槽函数接收信号启动后,是在线程里执行否,答案并不是,只有run 函数才是执行在线程中的,要让槽函数执行在线程中,必须使用qt moveToThread函数,并且要正确的使用方法,下面是正确的使用方法。

代码示例

#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();
    }
};



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();
}
#endif

以上是关于qt 线程接收线程 moveToThread 特性的主要内容,如果未能解决你的问题,请参考以下文章

Qt源码阅读 moveToThread

Qt 线程关联和 moveToThread 的问题

Qt 多线程使用moveToThread

QT多线程之---moveToThread用法

Qt线程—QThread的使用--run和movetoThread的用法

qt中通过重写run方法创建线程与通过movetothread方法有啥区别