> 文档中心 > QT 多线程 之MoveToThread使用详解

QT 多线程 之MoveToThread使用详解

以下举的实例非常简单易懂,一看就会,因为本人也比较小白,所以比较能懂小白的心情.
第一步:创建一个继承QObject的子类,在这里起的类名假定为MyObject
第二步:在要创建线程的地方使用moveToThread的方法创建时,步骤如下:
a.实例化MyObject

MyObject *myobject1 = new MyObject();

b.实例化QThread

QThread  *thread1 = new QThread();

c.将创建出来的MyObject加入到QThread中

myobject1->moveToThread(thread1);

d.将信号与槽关联起来,自带的线程信号有两个,一个是started,一个是finished,顾名思义,分别是当线程启动和结束的时候.这里只展示started的,可以使用自己自定义的信号

QObject::connect(thread1,SIGNAL(started()),myobject1,SLOT(doWorker()),Qt::QueuedConnection);

e.最后一步线程开启

thread1->start();

至此,利用movetothread创建出一个线程的方法就完成了,以上步骤缺一不可.
还有一些小细节以及开启多线程的方法,我会注释在下面的图片中.
同一个QObject的对象只能对应一个线程
在这里插入图片描述
注:可以通过下面的函数打印出线程的id

qDebug() << " 主线程 ID " << QThread::currentThread();

静态函数currentThreadId()和currentThread()返回标识当前正在执行的线程。前者返回线程的ID,后者返回一个线程指针。