Мне необходимо создать приложение, в котором происходит перемножение двух квадратных матриц. При этом пользователю предоставляется сделать выбор количества потоков, в которых будет происходить это самое умножение (maxThreadCount = matrixSize).
В связи с этим приложение имеет 2 класса:
my_thread : public QObject - здесь реализована функция перемножения
MainWindow - GUI
Запуск потоков происходит так:
for (qint32 i=0; i < threads_count; ++i)
{
myClassArray[i].moveToThread(&thrArray[i]);
thrArray[i].start();
QObject::connect(&thrArray[i], SIGNAL(started()), &myClassArray[i], SLOT(calculatingFirstAndLastIndeces()));
}
Где, после перемножения в классе my_thread, посылается сигнал об окончании перемножения:
emit end_work(numberThisThread);
Но обработка:
void MainWindow::rcvEndWork(qint32 threadNumber)
{
thrArray[threadNumber].quit();
qDebug() << "Threads №" << threadNumber << " were closed";
}
этого сигнала в MainWindow происходит лишь один раз, т.е. если сигнал будет послан из 1600 потоков, то закроется лишь один.
Как мне закрыть все потоки после того, как они закончили свою работу?
Сборка персонального компьютера от Artline: умный выбор для современных пользователей