优化filter stop

This commit is contained in:
2026-06-08 15:23:47 +08:00
parent 140fd9a487
commit ac0de93e31
3 changed files with 19 additions and 20 deletions

View File

@@ -102,8 +102,7 @@ class SlidingFilter(threading.Thread):
n_chan=66,
srate=250,
window_sec=3,
step_sec=0.2, # 200ms滑动步长
packet_size=5
step_sec=0.2
):
super().__init__(daemon=True)
# 核心参数
@@ -114,7 +113,6 @@ class SlidingFilter(threading.Thread):
self.step_sec = step_sec # 200ms滑动步长
self.window_size = int(srate * window_sec) # 3秒点数250*3=750
self.step_size = int(srate * step_sec) # 200ms点数250*0.2=50
self.packet_size = packet_size
# 关联ZMQServer的环形缓存解耦仅依赖接口
self.ring_buffer = ring_buffer
@@ -194,6 +192,17 @@ class SlidingFilter(threading.Thread):
self.filter_result_callback = callback
def stop(self):
"""停止滤波线程"""
"""停止滤波线程(安全版)"""
# 1. 先设置停止标志Event.clear()是线程安全的)
self.running.clear()
self.join(timeout=1)
# 2. 核心修复只有线程已启动且正在运行时才调用join
if self.is_alive():
# 等待线程正常退出最多1秒
self.join(timeout=1)
# 超时未退出时打印警告,便于排查问题
if self.is_alive():
algo_log("警告滤波线程在1秒内未正常退出可能存在阻塞操作", level="WARNING")
# 3. 无论线程是否启动,都打印停止日志
algo_log("滤波线程已停止")