From e385618d093e1e576df0d452afe8f2626853b937 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil <33750417+thattil@users.noreply.github.com> Date: Fri, 16 Sep 2022 17:02:03 +0200 Subject: [PATCH] gui crash qtimer (#551) * locks when qtimer runs out same time as acquisitionfinished * fix for newer gcc --- slsDetectorGui/include/qTabMeasurement.h | 4 ++++ slsDetectorGui/slsDetectorPlotting/include/SlsQt1DPlot.h | 1 + slsDetectorGui/slsDetectorPlotting/include/SlsQt2DPlot.h | 1 + slsDetectorGui/src/qDrawPlot.cpp | 8 +++++++- slsDetectorGui/src/qTabMeasurement.cpp | 3 ++- 5 files changed, 15 insertions(+), 2 deletions(-) diff --git a/slsDetectorGui/include/qTabMeasurement.h b/slsDetectorGui/include/qTabMeasurement.h index 350a59630..89c465e96 100644 --- a/slsDetectorGui/include/qTabMeasurement.h +++ b/slsDetectorGui/include/qTabMeasurement.h @@ -4,6 +4,8 @@ #include "sls/Detector.h" #include "ui_form_tab_measurement.h" +#include + class QStandardItemModel; namespace sls { @@ -100,6 +102,8 @@ class qTabMeasurement : public QWidget, private Ui::TabMeasurementObject { bool isAcquisitionStopped{false}; int numMeasurements{1}; int currentMeasurement{0}; + mutable std::mutex mProgress; + }; } // namespace sls diff --git a/slsDetectorGui/slsDetectorPlotting/include/SlsQt1DPlot.h b/slsDetectorGui/slsDetectorPlotting/include/SlsQt1DPlot.h index c5914cd7c..d292512b7 100644 --- a/slsDetectorGui/slsDetectorPlotting/include/SlsQt1DPlot.h +++ b/slsDetectorGui/slsDetectorPlotting/include/SlsQt1DPlot.h @@ -5,6 +5,7 @@ #include "SlsQt1DZoomer.h" #include "sls/ansi.h" +#include #include #include #include diff --git a/slsDetectorGui/slsDetectorPlotting/include/SlsQt2DPlot.h b/slsDetectorGui/slsDetectorPlotting/include/SlsQt2DPlot.h index 650b8f295..b34d5d482 100644 --- a/slsDetectorGui/slsDetectorPlotting/include/SlsQt2DPlot.h +++ b/slsDetectorGui/slsDetectorPlotting/include/SlsQt2DPlot.h @@ -3,6 +3,7 @@ #pragma once #include "SlsQt2DHist.h" #include "SlsQt2DZoomer.h" +#include #include #include #include diff --git a/slsDetectorGui/src/qDrawPlot.cpp b/slsDetectorGui/src/qDrawPlot.cpp index c8cb311ce..96bfa2454 100644 --- a/slsDetectorGui/src/qDrawPlot.cpp +++ b/slsDetectorGui/src/qDrawPlot.cpp @@ -254,13 +254,17 @@ void qDrawPlot::resizeEvent(QResizeEvent *event) { bool qDrawPlot::GetIsRunning() { return isRunning; } -void qDrawPlot::SetRunning(bool enable) { isRunning = enable; } +void qDrawPlot::SetRunning(bool enable) { + std::lock_guard lock(mPlots); + isRunning = enable; +} double qDrawPlot::GetProgress() { return progress; } int64_t qDrawPlot::GetCurrentFrameIndex() { return currentFrame; } void qDrawPlot::Select1dPlot(bool enable) { + std::lock_guard lock(mPlots); if (enable) { is1d = true; // DetachHists(); it clears the last measurement @@ -487,6 +491,7 @@ void qDrawPlot::EnableGainPlot(bool enable) { } void qDrawPlot::SetSaveFileName(QString val) { + std::lock_guard lock(mPlots); LOG(logDEBUG) << "Setting Clone/Save File Name to " << val.toAscii().constData(); fileSaveName = val; @@ -592,6 +597,7 @@ void qDrawPlot::ClonePlot() { } void qDrawPlot::SavePlot() { + std::lock_guard lock(mPlots); // render image QImage savedImage(size().width(), size().height(), QImage::Format_RGB32); QPainter painter(&savedImage); diff --git a/slsDetectorGui/src/qTabMeasurement.cpp b/slsDetectorGui/src/qTabMeasurement.cpp index 841c8465c..bc95062c5 100644 --- a/slsDetectorGui/src/qTabMeasurement.cpp +++ b/slsDetectorGui/src/qTabMeasurement.cpp @@ -865,6 +865,7 @@ void qTabMeasurement::SetNextFrameNumber(int val) { } void qTabMeasurement::ResetProgress() { + std::lock_guard lock(mProgress); LOG(logDEBUG) << "Resetting progress"; lblCurrentFrame->setText("0"); lblCurrentMeasurement->setText("0"); @@ -873,6 +874,7 @@ void qTabMeasurement::ResetProgress() { void qTabMeasurement::UpdateProgress() { LOG(logDEBUG) << "Updating progress"; + std::lock_guard lock(mProgress); progressBar->setValue(plot->GetProgress()); lblCurrentFrame->setText(QString::number(plot->GetCurrentFrameIndex())); lblCurrentMeasurement->setText(QString::number(currentMeasurement)); @@ -920,7 +922,6 @@ void qTabMeasurement::StartAcquisition() { currentMeasurement = 0; ResetProgress(); Enable(0); - progressBar->setValue(0); progressTimer->start(100); emit EnableTabsSignal(false); }