This commit is contained in:
yrx
2026-08-12 14:59:13 +08:00
parent 165eeff64e
commit dc5da0294f
14 changed files with 202 additions and 15 deletions
+14 -7
View File
@@ -549,15 +549,20 @@ class WiFiManager:
on_poor_quality_callback: WiFi质量差时的回调函数
"""
with self._wifi_quality_lock:
if self._wifi_quality_monitor_thread is not None and self._wifi_quality_monitor_thread.is_alive():
current_thread = self._wifi_quality_monitor_thread
current_stop_event = self._wifi_quality_stop_event
if (current_thread is not None and current_thread.is_alive()
and not current_stop_event.is_set()):
self.logger.warning("[WiFi Monitor] 监测线程已在运行")
return
self._network_type_callback = network_type_callback
self._on_poor_quality_callback = on_poor_quality_callback
self._wifi_quality_stop_event.clear()
stop_event = threading.Event()
self._wifi_quality_stop_event = stop_event
self._wifi_quality_monitor_thread = threading.Thread(
target=self._quality_monitor_loop,
args=(stop_event,),
daemon=True,
name="wifi_quality_monitor"
)
@@ -568,13 +573,14 @@ class WiFiManager:
"""停止 WiFi 质量监测线程"""
with self._wifi_quality_lock:
t = self._wifi_quality_monitor_thread
stop_event = self._wifi_quality_stop_event
if t is None:
return
if not t.is_alive():
self._wifi_quality_monitor_thread = None
return
self._wifi_quality_stop_event.set()
stop_event.set()
try:
t.join(timeout=2.0)
except Exception as e:
@@ -588,12 +594,12 @@ class WiFiManager:
self._wifi_quality_monitor_thread = None
self.logger.info("[WiFi Monitor] 已停止后台监测线程")
def _quality_monitor_loop(self):
def _quality_monitor_loop(self, stop_event):
"""
WiFi 质量监测循环(后台线程)
每 5 秒检查 STA 关联状态和 RSSI,发现断链或质量差则触发切换
"""
while not self._wifi_quality_stop_event.is_set():
while not stop_event.is_set():
try:
# 只在 WiFi 连接时才测量
network_type = self._network_type_callback()
@@ -631,7 +637,8 @@ class WiFiManager:
self.logger.warning("[WiFi Monitor] 质量差,切换前快速重试 2 次(每次间隔1秒)")
for retry_idx in range(2):
time.sleep_ms(1000)
if stop_event.wait(1.0):
return
reachable2 = self.is_sta_associated()
rtt2 = None
rssi2 = self._get_wifi_rssi_dbm()
@@ -660,7 +667,7 @@ class WiFiManager:
self._on_poor_quality_callback()
# 休眠 5 秒
time.sleep(5)
stop_event.wait(5.0)
except Exception as e:
self.logger.error(f"[WiFi Monitor] 监测异常:{e}")