优化filter stop
This commit is contained in:
@@ -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("滤波线程已停止")
|
||||
|
||||
@@ -268,7 +268,7 @@ class zmqServer(threading.Thread):
|
||||
# -------------------------- 数据端口消息处理 --------------------------
|
||||
def _handle_data_message(self, frames):
|
||||
"""处理8100端口二进制脑电数据消息"""
|
||||
algo_log(f"收到数据帧,总帧数:{len(frames)}", level="DEBUG", record_once=True)
|
||||
algo_log(f"收到数据帧,总帧数:{len(frames)}", level="DEBUG", record_once=False)
|
||||
# 然后再进行解析
|
||||
if len(frames) == 4:
|
||||
# 你的上位机格式
|
||||
|
||||
Reference in New Issue
Block a user