Qt_Core_AD_8 - 8BitsCoding/RobotMentor GitHub Wiki


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

#include <qdebug.h>
#include <qthreadpool.h>
#include <qsemaphore.h>

#include "worker.h"

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

	QStringList data;
	for (int i = 0; i < 100; i++) {
		data.append(QString::number(i));
	}

	QThreadPool* pool = QThreadPool::globalInstance();
	QSemaphore sema(100);

	for (int i = 0; i < data.length();i++)
	{
		worker* w = new worker(&a, &data, &sema, i);
		w->setAutoDelete(true);
		pool->start(w);
	}
	pool->waitForDone();

	foreach(QString string, data)
	{
		qInfo() << string;
	}

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

#include <QObject>
#include <qdebug.h>
#include <qthread.h>
#include <qrunnable.h>
#include <qsemaphore.h>

class worker : public QObject, public QRunnable
{
	Q_OBJECT

public:
	explicit worker(QObject *parent = nullptr, QStringList* data = nullptr, QSemaphore* sema = nullptr, int position = -1);
	~worker();

	void run();

signals:

public slots:


private:
	QStringList* data;
	QSemaphore* sema;
	int position;
};
// worker.cpp
#include "worker.h"


worker::worker(QObject* parent, QStringList* data, QSemaphore* sema, int position) : QObject(parent), QRunnable()
{
	this->sema = sema;
	this->data = data;
	this->position = position;
}

worker::~worker()
{

}

void worker::run()
{
	if (!data || !sema) {
		qInfo() << "Missing pointers!";
		return;
	}

	QString t;
	t.sprintf("%08p", QThread::currentThread());
	sema->acquire(1);
	data->replace(position, QString::number(position) + " - " + t);
	sema->release();

	qInfo() << t << " Finished" << position;
}
⚠️ **GitHub.com Fallback** ⚠️