2.15.23
This commit is contained in:
@@ -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}")
|
||||
|
||||
Reference in New Issue
Block a user