m_statusTimer = nullptr;
}
}
- // 网络状态更新后台任务结构体
- struct NetworkStatusUpdateTask {
- ThunderBirdModel* model;
- };
- // 网络状态更新线程句柄
- static uint32_t g_net_status_update_thread_handle = 0;
-
- // 网络状态更新后台线程函数
- static void NetworkStatusUpdateThreadFunc(void* arg)
- {
- NetworkStatusUpdateTask* task = static_cast<NetworkStatusUpdateTask*>(arg);
- if (task == nullptr || task->model == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "NetworkStatusUpdateThreadFunc: Invalid task");
- if (task) delete task;
- return;
- }
-
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NetworkStatusUpdateThreadFunc: Starting background network status update");
-
- // 在后台线程更新网络状态(耗时操作)
- task->model->UpdateNetworkStatus();
-
- // 更新完成后,通过PostGraphicEvent回到UI线程继续处理
- GraphicService::GetInstance()->PostGraphicEvent([task]() {
- if (task->model != nullptr) {
- // 继续执行StatusCallback中需要在UI线程执行的部分
- task->model->StatusCallbackUI();
- }
- delete task;
- });
- }
-
/**
- * @brief 状态管理回调处理(UI线程部分)
+ * @brief 状态管理回调处理
*/
- void ThunderBirdModel::StatusCallbackUI()
+ void ThunderBirdModel::StatusCallback()
{
// if( HasCat1Power() == false)
// {
// return;
// }
+ // 更新网络状态
+ UpdateNetworkStatus();
+
// 检查网络状态是否有网
-
if(HasNetwork())
{
if(get_is_ln_get_device_network_success())
ThunderBirdPresenter::GetInstance()->timer_callback_toui_proc();
}
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "StatusCallbackUI: status=%d", static_cast<int>(m_currentStatus));
- }
-
- /**
- * @brief 状态管理回调处理(启动后台线程更新网络状态)
- */
- void ThunderBirdModel::StatusCallback()
- {
- // ==================== 网络状态处理 ====================
- // 将网络状态更新移到后台线程,避免阻塞UI线程
- NetworkStatusUpdateTask* task = new NetworkStatusUpdateTask();
- task->model = this;
-
- // 创建后台线程执行网络状态更新
- app_task_definition_ext_t task_cfg;
- memset(&task_cfg, 0, sizeof(task_cfg));
-
- task_cfg.attr.name = "NetStatusUpdate";
- task_cfg.attr.priority = osPriorityNormal;
- task_cfg.attr.stack_size = 0x1000; // 4KB栈(UpdateNetworkStatus需要调用底层API,需要足够栈空间)
- task_cfg.func = (osThreadFunc_t)NetworkStatusUpdateThreadFunc;
- task_cfg.task_handle = &g_net_status_update_thread_handle;
- task_cfg.create_queue_handle = NULL;
- task_cfg.use_mem = USE_EXTEND_MEM; /* 将线程栈放到扩展内存,降低TCB/heap压力 */
- task_cfg.inst_args = task; /* 传递任务参数 */
-
- errcode_t tret = uapi_create_osThread_custom_with_args(&task_cfg);
- // 注意:uapi_create_osThread_custom_with_args 会将 osThreadId_t (void*) 直接赋值给 task_handle 指针
- // 需要手动转换并设置到我们的句柄变量中
- if (tret == ERRCODE_SUCC && task_cfg.task_handle != NULL) {
- // 将线程ID转换为uint32_t并设置到句柄变量
- // task_handle 字段存储的是 osThreadId_t (void*) 值,需要转换为 uint32_t
- void* threadId = (void*)task_cfg.task_handle;
- g_net_status_update_thread_handle = (uint32_t)(unsigned long)threadId;
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::StatusCallback: thread created successfully, handle=0x%x", g_net_status_update_thread_handle);
- } else {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::StatusCallback: thread create failed: 0x%x", tret);
- // 如果线程创建失败,回退到同步方式(不推荐,但至少能工作)
- UpdateNetworkStatus();
- StatusCallbackUI();
- delete task;
- }
- // 如果线程创建成功,StatusCallbackUI会在后台线程完成后通过PostGraphicEvent调用
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "StatusCallback: status=%d", static_cast<int>(m_currentStatus));
}