From 7cb3ed2438498c45930fa7b9c9af44c1c90d47ad Mon Sep 17 00:00:00 2001 From: Sam Scholten Date: Tue, 14 Oct 2025 16:23:17 +1000 Subject: Route worker stop through queued signal to prevent crashes --- picostream/main.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/picostream/main.py b/picostream/main.py index f1504fb..a882b80 100644 --- a/picostream/main.py +++ b/picostream/main.py @@ -4,7 +4,7 @@ import os import sys from typing import Any, Dict, Optional -from PyQt5.QtCore import QObject, QSettings, QThread, pyqtSignal +from PyQt5.QtCore import QObject, QSettings, QThread, pyqtSignal, pyqtSlot, Qt from PyQt5.QtGui import QCloseEvent from PyQt5.QtWidgets import ( QApplication, @@ -32,6 +32,7 @@ class StreamerWorker(QObject): finished = pyqtSignal() error = pyqtSignal(str) + stopRequested = pyqtSignal() def __init__(self, settings: Dict[str, Any]) -> None: """Initialise the worker.""" @@ -49,6 +50,7 @@ class StreamerWorker(QObject): finally: self.finished.emit() + @pyqtSlot() def stop(self) -> None: """Signal the acquisition to stop.""" if self.streamer: @@ -193,6 +195,7 @@ class PicoStreamMainWindow(QMainWindow): self.thread = QThread() self.worker = StreamerWorker(settings) self.worker.moveToThread(self.thread) + self.worker.stopRequested.connect(self.worker.stop, Qt.QueuedConnection) self.thread.started.connect(self.worker.run) self.worker.finished.connect(self.thread.quit) @@ -206,7 +209,7 @@ class PicoStreamMainWindow(QMainWindow): def stop_acquisition(self) -> None: """Stop the background data acquisition.""" if self.worker: - self.worker.stop() + self.worker.stopRequested.emit() self.stop_button.setEnabled(False) def on_acquisition_finished(self) -> None: -- cgit v1.2.3