Qt_Core_AD_4 - 8BitsCoding/RobotMentor GitHub Wiki


// main.cpp
#include <QtCore/QCoreApplication>

#include <qdebug.h>
#include <qthread.h>

#include "manager.h"

int main(int argc, char *argv[])
{
	QCoreApplication a(argc, argv);

	QThread::currentThread()->setObjectName("Main");

	manager m;
	m.start();

	return a.exec();
}
// manager.h
#pragma once

#include <QObject>
#include <qdebug.h>
#include <qthread.h>
#include <qlist.h>

#include "counter.h"

class manager : public QObject
{
	Q_OBJECT

public:
	explicit manager(QObject *parent = nullptr);
	~manager();
	void start();

signals:

public slots:
	void started();
	void finished();

private:
	QList<QThread*> threads;
};
// manager.cpp
#include "manager.h"

manager::manager(QObject *parent)
	: QObject(parent)
{
	for (int i = 0; i < 5; i++) {
		QThread* thread = new QThread(this);
		thread->setObjectName("Thread " + QString::number(i));
		qInfo() << "Created: " << thread->objectName();

		connect(thread, &QThread::started, this, &manager::started);
		connect(thread, &QThread::finished, this, &manager::finished);
	
		threads.append(thread);
	}
}

manager::~manager()
{
}


void manager::started()
{
	QThread* thread = qobject_cast<QThread*>(sender());

	if (!thread) return;

	qInfo() << "Started: " << thread->objectName();
}

void manager::finished()
{
	QThread* thread = qobject_cast<QThread*>(sender());

	if (!thread) return;

	qInfo() << "Finished: " << thread->objectName();
}

void manager::start()
{
	qInfo() << "Starting ... ";

	foreach(QThread * thread, threads) {
		qInfo() << "Starting: " << thread->objectName();
		counter* c = new counter();
		c->moveToThread(thread);

		connect(thread, &QThread::started, c, &counter::start);
		thread->start();
	}
}
// counter.h
#pragma once

#include <QObject>
#include <qdebug.h>
#include <qthread.h>
#include <qrandom.h>

class counter : public QObject
{
	Q_OBJECT

public:
	explicit counter(QObject *parent = nullptr);
	~counter();

signals:

public slots:
	void start();

};
// counter.cpp
#include "counter.h"

counter::counter(QObject *parent)
	: QObject(parent)
{
}

counter::~counter()
{
}

void counter::start()
{
	for (int i = 0; i < 20; i++)
	{
		qInfo() << QThread::currentThread()->objectName() << " = " << i;
		auto value = static_cast<unsigned long>(QRandomGenerator::global()->bounded(500));
		QThread::currentThread()->msleep(value);
	}

	QThread::currentThread()->quit();
}

이미지

⚠️ **GitHub.com Fallback** ⚠️