Qt C++ Потоки и ProgressBar

387
08 июля 2017, 10:18

Всем привет. Есть пулл потоков, к примеру их 10 штук. Как сделать так, что по завершению каждого из потоков идёт прибавка в ProgressBar? К примеру есть 10 элементов, на каждый элемент по потоку итого 100/10 каждое завершение потока +10% к progressBar. Как грамотно сделать такой ProgressBar ? Код тестового примера ниже:

Начало всего:

void Calculate::start()
{
QVector<int> elements;
for (int i = 0; i < 100; i++)
{
    elements.append(i);
}
QVector<int> KA;
for (int i = 0; i < 10; i++)
{
    KA.append(i);
}
for (int i = 0; i < KA.size(); i++)
{
    Worker * worker = new Worker(i);
    worker->setAutoDelete(false);
    worker->setElements(&elements,elements.size());
    QThreadPool *threadPool = QThreadPool::globalInstance();
    threadPool->setMaxThreadCount(KA.size());
    threadPool->start(worker);
}
}

Worker.h

#ifndef WORKER_H
#define WORKER_H
#include <QObject>
#include <QRunnable>
class Worker : public QObject, public QRunnable
{
Q_OBJECT
public:
Worker(int _indexKA);
~Worker();
void setElements(QVector<int> *_elements, int size)
{
    elements = _elements;
    sizeElements = size;
}
virtual void run();
signals:
private:
int indexKA;
QVector<int> *elements;
int sizeElements;
};
#endif // WORKER_H

Worker.cpp

#include "worker.h"
#include <QDebug>
Worker::Worker(int _indexKA)
{
indexKA = _indexKA;
}
Worker::~Worker()
{
}
void Worker::run()
{
qDebug() << "START";
int summ = 0;
for (int i = 0; i < sizeElements; i++)
{
    summ = indexKA + i;
    qDebug() << summ;
}
qDebug() << summ;
// здесь как то уведомить поток о завершении и передать 10% в прогресс бар
}
Answer 1

Объявите сигнал о завершении работы воркера (без параметров), этот сигнал принимайте в интерфейсе от каждого из воркеров пула и при поступлении сигнала увеличивайте значение в прогресс-баре на фиксированную величину, рассчитывваемую из количества воркеров. Подразумевается, что количество воркеров известно в том месте, где требуется обновить прогресс-бар.

Сам по себе воркер не должен знать, сколько процентов работы он завершил, так как он ничего не знает о других воркерах.

READ ALSO
Перенос данных mySQL

Перенос данных mySQL

Только начал изучать SQL, возник такой вопрос, не смог найти (скорее всего не грамотно вводил в поиск)Имеется: таблица1 и таблица2 с одинаковой...

441
Выбрать максимльно количество записей

Выбрать максимльно количество записей

Никак не могу реализовать такой запрос: необходимо вывести id пользователя, у которого максимальное количество друзейЕсть такая таблица:

299