Fix GUI freezing while nesting.
This commit is contained in:
parent
a33ad45e37
commit
812c0b84d7
|
@ -37,6 +37,7 @@
|
|||
- Support for Dark mode.
|
||||
- Fix issue with passing incorrect number of dimension to Tape.
|
||||
- New option: Pointer mode.
|
||||
- Fix GUI freezing while nesting.
|
||||
|
||||
# Valentina 0.7.52 September 12, 2022
|
||||
- Fix crash when default locale is ru.
|
||||
|
|
|
@ -193,7 +193,7 @@ auto MainWindowsNoGUI::GenerateLayout(VLayoutGenerator &lGenerator) -> bool
|
|||
#if defined(Q_OS_WIN32) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0) && QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
|
||||
QTimer *progressTimer = nullptr;
|
||||
#endif
|
||||
|
||||
|
||||
QSharedPointer<DialogLayoutProgress> progress;
|
||||
if (VApplication::IsGUIMode())
|
||||
{
|
||||
|
@ -206,10 +206,10 @@ auto MainWindowsNoGUI::GenerateLayout(VLayoutGenerator &lGenerator) -> bool
|
|||
[this, timer]() { m_taskbarProgress->setValue(static_cast<int>(timer.elapsed() / 1000)); });
|
||||
progressTimer->start(1000);
|
||||
#endif
|
||||
|
||||
|
||||
progress = QSharedPointer<DialogLayoutProgress>(
|
||||
new DialogLayoutProgress(timer, lGenerator.GetNestingTimeMSecs(), this));
|
||||
|
||||
|
||||
connect(progress.data(), &DialogLayoutProgress::Abort, &lGenerator, &VLayoutGenerator::Abort);
|
||||
connect(progress.data(), &DialogLayoutProgress::Timeout, &lGenerator, &VLayoutGenerator::Timeout);
|
||||
|
||||
|
@ -278,7 +278,15 @@ auto MainWindowsNoGUI::GenerateLayout(VLayoutGenerator &lGenerator) -> bool
|
|||
break;
|
||||
}
|
||||
|
||||
lGenerator.Generate(timer, lGenerator.GetNestingTimeMSecs(), nestingState);
|
||||
{
|
||||
QEventLoop wait;
|
||||
QFutureWatcher<void> fw;
|
||||
fw.setFuture(
|
||||
QtConcurrent::run([&lGenerator, timer, nestingState]()
|
||||
{ lGenerator.Generate(timer, lGenerator.GetNestingTimeMSecs(), nestingState); }));
|
||||
QObject::connect(&fw, &QFutureWatcher<void>::finished, &wait, &QEventLoop::quit);
|
||||
wait.exec();
|
||||
}
|
||||
|
||||
if (IsTimeout())
|
||||
{
|
||||
|
@ -380,12 +388,14 @@ auto MainWindowsNoGUI::GenerateLayout(VLayoutGenerator &lGenerator) -> bool
|
|||
break;
|
||||
}
|
||||
|
||||
nestingState = lGenerator.State();
|
||||
|
||||
if (nestingState == LayoutErrors::PrepareLayoutError || nestingState == LayoutErrors::ProcessStoped ||
|
||||
nestingState == LayoutErrors::TerminatedByException ||
|
||||
(nestingState == LayoutErrors::NoError && not qFuzzyIsNull(lGenerator.GetEfficiencyCoefficient()) &&
|
||||
efficiency >= lGenerator.GetEfficiencyCoefficient()))
|
||||
nestingState == LayoutErrors::TerminatedByException)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (nestingState == LayoutErrors::NoError && not qFuzzyIsNull(lGenerator.GetEfficiencyCoefficient()) &&
|
||||
efficiency >= lGenerator.GetEfficiencyCoefficient())
|
||||
{
|
||||
if (not lGenerator.IsPreferOneSheetSolution() || lGenerator.PapersCount() == 1)
|
||||
{
|
||||
|
|
|
@ -214,8 +214,6 @@ void VLayoutGenerator::Generate(const QElapsedTimer &timer, qint64 timeout, Layo
|
|||
return;
|
||||
}
|
||||
|
||||
QCoreApplication::processEvents();
|
||||
|
||||
if (stopGeneration.load())
|
||||
{
|
||||
break;
|
||||
|
|
|
@ -238,27 +238,12 @@ auto VPosition::ArrangeDetail(const VPositionData &data, std::atomic_bool *stop,
|
|||
|
||||
watcher.setFuture(QtConcurrent::mapped(jobs, Nest));
|
||||
|
||||
while (not watcher.isStarted())
|
||||
{
|
||||
QCoreApplication::processEvents();
|
||||
QThread::msleep(250);
|
||||
}
|
||||
|
||||
// Wait for done
|
||||
do
|
||||
{
|
||||
QCoreApplication::processEvents();
|
||||
QThread::msleep(250);
|
||||
} while (watcher.isRunning() && not stop->load());
|
||||
QEventLoop wait;
|
||||
QObject::connect(&watcher, &QFutureWatcher<VBestSquare>::finished, &wait, &QEventLoop::quit);
|
||||
wait.exec();
|
||||
|
||||
if (stop->load())
|
||||
{
|
||||
do
|
||||
{
|
||||
QCoreApplication::processEvents();
|
||||
QThread::msleep(250);
|
||||
} while (watcher.isRunning());
|
||||
|
||||
return bestResult;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user