Qt moveToThread

54 篇文章 1 订阅

注意,MyTask不能有父对象,否则线程不能转移,只能在父线程中执行。

#pragma once

#include <QObject>
#include <QThread>
#include <QDebug>

class MyTask : public QObject
{
	Q_OBJECT

signals:
	void sigResult(const QString &result);

public slots:
	void slotDoing(const QString &val)
	{
		qDebug() << "Worker thread id:" << this->thread()->currentThreadId();
		QString newVal;
		foreach (QChar c, val) {
			newVal.insert(0, c);
		}
		emit sigResult(newVal);
		QThread::sleep(3);
	}
};

class Controller : public QObject
{
	Q_OBJECT
public:
	Controller(QObject *parent=0) : QObject(parent)
	{
		qDebug() << "Controller thread id:" << this->thread()->currentThreadId();
		MyTask *task = new MyTask();
		task->moveToThread(&m_taskThread);
		connect(&m_taskThread, &QThread::finished, task, &QObject::deleteLater);
		connect(this, &Controller::sigStart, task, &MyTask::slotDoing);
		connect(task, &MyTask::sigResult, this, &Controller::slotResult);
		m_taskThread.start();
	}

	~Controller()
	{
		m_taskThread.quit();
		m_taskThread.wait(10000);
		qDebug() << "exit...";
	}

signals:
	void sigStart(const QString &val);

private slots:
	void slotResult(const QString &result)
	{
		qDebug() << result;
	}

private:
	QThread m_taskThread;
};


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值