# Plan: libtask 优化 ## 优化建议列表 基于《libtask模块分析.md》中 8 个缺点,按严重度排优先级: | # | 优化项 | 严重度 | 改动量 | 说明 | |---|--------|--------|--------|------| | 1 | Timer TOCTOU 修复 | 中 | 2行 | stop/destroy 等 handler 执行完毕再返回 | | 2 | 消息队列阻塞 send | 中 | ~40行 | 新增 `task_msg_queue_send_timeout`,满时阻塞等待 | | 3 | 事件查询接口 | 低 | ~15行 | 新增 `task_event_query`,不等待查询当前事件位 | | 4 | 清理死代码 | 低 | ~10行 | 删除未使用的 `#include `、注释掉的 `non_block` 等 | | 5 | Timer SIGEV_THREAD 保留 | — | 0行 | 评估后不修改(回调仅做 task_event_send,mutex 安全) | 每个优化项独立、低风险、不改变现有 API 兼容性。 --- ## 步骤 ### T1: 保存 plan 到 mimo/plan/ ### T2: 优化 #1 — Timer TOCTOU 修复 - 在 `stru_task_timer` 新增 `int running` 字段 - `task_timer_sig_handler`: `fun()` 前设 `running=1`,后设 `running=0` - `task_timer_stop`: 置 `active=0` 后 `while(running) usleep(100)` 等 handler 完成 - `task_timer_destroy`: 同 stop 的等待逻辑 ### T3: 优化 #2 — 消息队列阻塞 send - 新增 API: `int task_msg_queue_send_timeout(queue, msg, size, timeout_ms)` - 逻辑: 满时 `pthread_cond_timedwait` → 有空位则写入 → signal 接收者 - 在 `myTask.h` 中新增声明 ### T4: 优化 #3 — 事件查询接口 - 新增 API: `uint32_t task_event_query(stru_task_event_t p_event)` - 逻辑: lock → 读取 events → unlock → 返回(不清除) - 在 `myTask.h` 中新增声明 ### T5: 优化 #4 — 清理死代码 - 删除未使用头文件: `#include `, `#include `, `#include `, `#include ` - 删除 `stru_task_msg_queue` 中注释掉的 `int non_block` ### T6: 编译验证 - 执行 `./release/build.sh` 确保所有改动编译零错误零警告 ### T7: 更新分析文档 - 更新 `mimo/工程/libtask模块分析.md` 的优缺点章节,反映优化结果 --- ## 涉及文件 - **修改**: `src/public/libtask/src/myTask.c`(核心修改) - **修改**: `release/inc/myTask.h`(新增 API 声明) - **修改**: `mimo/工程/libtask模块分析.md`(同步优缺点) ## 验证 1. `./release/build.sh` 编译通过 2. 确认所有现有调用点(app_sys.cpp 中的 task_timer_create + task_event_send)不受影响