diff --git a/src/libs/vlayout/vlayoutgenerator.cpp b/src/libs/vlayout/vlayoutgenerator.cpp index 553c2a596..9e7b41457 100644 --- a/src/libs/vlayout/vlayoutgenerator.cpp +++ b/src/libs/vlayout/vlayoutgenerator.cpp @@ -34,6 +34,7 @@ #include #include #include +#include //--------------------------------------------------------------------------------------------------------------------- VLayoutGenerator::VLayoutGenerator(QObject *parent) @@ -183,6 +184,9 @@ void VLayoutGenerator::Abort() { stopGeneration = true; state = LayoutErrors::ProcessStoped; +#if QT_VERSION >= QT_VERSION_CHECK(5, 2, 0) + QThreadPool::globalInstance()->clear(); +#endif } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vlayout/vlayoutpaper.cpp b/src/libs/vlayout/vlayoutpaper.cpp index 073ccb315..3be950d56 100644 --- a/src/libs/vlayout/vlayoutpaper.cpp +++ b/src/libs/vlayout/vlayoutpaper.cpp @@ -183,13 +183,14 @@ bool VLayoutPaper::AddToSheet(const VLayoutDetail &detail, bool &stop) { VBestSquare bestResult; QThreadPool *thread_pool = QThreadPool::globalInstance(); + thread_pool->setExpiryTimeout(1000); QVector threads; for (int j=1; j <= d->globalContour.EdgesCount(); ++j) { for (int i=1; i<= detail.EdgesCount(); i++) { - QCoreApplication::processEvents(); + //QCoreApplication::processEvents(); VPosition *thread = new VPosition(d->globalContour, j, detail, i, &stop, d->rotate, d->rotationIncrease); //Info for debug @@ -208,15 +209,14 @@ bool VLayoutPaper::AddToSheet(const VLayoutDetail &detail, bool &stop) } } - if (thread_pool->waitForDone() == false) - { - return false; - } + thread_pool->waitForDone(); QCoreApplication::processEvents(); if (stop) { + qDeleteAll(threads.begin(), threads.end()); + threads.clear(); return false; } diff --git a/src/libs/vlayout/vposition.cpp b/src/libs/vlayout/vposition.cpp index 0ad744b18..13374e081 100644 --- a/src/libs/vlayout/vposition.cpp +++ b/src/libs/vlayout/vposition.cpp @@ -58,13 +58,13 @@ VPosition::VPosition(const VContour &gContour, int j, const VLayoutDetail &detai //--------------------------------------------------------------------------------------------------------------------- void VPosition::run() { - QCoreApplication::processEvents(); - if (*stop) { return; } + QCoreApplication::processEvents(); + // We should use copy of the detail. VLayoutDetail workDetail = detail;