优化心率的停止定时器
authorCaisking <Casiking@zhihuishixun.com>
Fri, 26 Dec 2025 13:19:18 +0000 (21:19 +0800)
committerCaisking <Casiking@zhihuishixun.com>
Fri, 26 Dec 2025 13:19:18 +0000 (21:19 +0800)
code/sdk/application/wearable/fd272/nativeapp/nativeui/heartrate/src/HeartModel.cpp

index 044aba6..bb65cf7 100644 (file)
@@ -1012,14 +1012,22 @@ void HeartModel::heart_stop_screen60s_timer(void) {
   if (g_screen60s_timer != nullptr) {\r
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
                   "HeartModel::heart_stop_screen60s_timer");\r
-    osTimerStop(g_screen60s_timer);\r
-    // 删除定时器并置为 nullptr\r
-    osStatus_t ret = osTimerDelete(g_screen60s_timer);\r
+    // 先停止定时器,避免在回调执行时删除\r
+    osStatus_t ret = osTimerStop(g_screen60s_timer);\r
+    if (ret != osOK) {\r
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
+                    "osTimerStop failed, ret = %lx!!", ret);\r
+      // 如果停止失败,仍然尝试删除,但记录错误\r
+    }\r
+    // 保存定时器指针,避免在删除过程中被其他线程修改\r
+    osTimerId_t timer_to_delete = g_screen60s_timer;\r
+    g_screen60s_timer = nullptr;  // 先置为nullptr,防止重复删除\r
+    // 删除定时器\r
+    ret = osTimerDelete(timer_to_delete);\r
     if (ret != osOK) {\r
       WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
                     "osTimerDelete failed, ret = %lx!!", ret);\r
     }\r
-    g_screen60s_timer = nullptr;\r
     SCREEN_60S_TIME = 60;\r
   }\r
 }\r