aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Scholten2025-10-14 16:23:17 +1000
committerSam Scholten2025-10-14 16:27:20 +1000
commit7cb3ed2438498c45930fa7b9c9af44c1c90d47ad (patch)
tree07c7f2fbe690ab9b80610aae84f341954d89e813
parentacc5a1a5fc1ac9805ca2ccf26f71b18c52debc02 (diff)
downloadpicostream-7cb3ed2438498c45930fa7b9c9af44c1c90d47ad.tar.gz
picostream-7cb3ed2438498c45930fa7b9c9af44c1c90d47ad.zip
Route worker stop through queued signal to prevent crashes
-rw-r--r--picostream/main.py7
1 files 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: