Qt封装一个类管理moveToThread( )正确的开启多线程、安全的退出线程的实例
看本篇的文章基础在于你已经懂得了简单的利用moveToThread的方法创建出一个线程.
不会的话可以查看本篇博客
QT 多线程 之MoveToThread使用详解
运用:
MultMoveToThread *testObject = new MultMoveToThread(4); testObject->createItem(); testObject->startMultThread();
.h
#ifndef MULTMOVETOTHREAD_H#define MULTMOVETOTHREAD_H#include #include #include "myobject.h"class MultMoveToThread{public: MultMoveToThread(int iCount); ~MultMoveToThread(); void startMultThread();private:int iThreadCount;//开启的线程个数 QList<MyObject*> myObjectList;//MyObject是我封装的一个继承QOBject的一个类 QList<QThread*> threadList;};#endif // MULTMOVETOTHREAD_H
.cpp
#include "multmovetothread.h"MultMoveToThread::MultMoveToThread(int iCount){ iThreadCount = iCount;}MultMoveToThread::~MultMoveToThread(){ for(int i = 0; i < iThreadCount; i++) { threadList.value(i)->quit(); threadList.value(i)->wait(); myObjectList.value(i)->deleteLater(); threadList.value(i)->deleteLater(); }}void MultMoveToThread::startMultThread(){//开始创建出函数 for(int i = 0;i < iThreadCount;i++) { MyObject *myObject = new MyObject(); QThread *thread = new QThread(); myObject->doAction();//这个函数里放线程主要做的事 myObjectList.append(myObject); threadList.append(thread); //这两步执行完之后, myObject里的实现函数就是通过线程来做的 myObject->moveToThread(thread); threadList.value(i)->start(); }}