先定义每个任务的一次工作量
轮询式结构的关键不是把几个无限循环放到一起,而是让每个任务每次只执行有限的一步。处理完当前步骤后立即返回主循环,下一轮继续推进。
for (;;) {
input_poll();
protocol_poll();
device_poll();
timer_poll();
wait_for_event_or_timeout();
}用状态保存进度
需要等待数据、超时或硬件完成的任务,可以用状态机保存进度。尚未满足条件时返回,不在任务内部反复等待。超时判断应使用单调时钟,避免系统时间调整造成误判。
注意阻塞和任务公平性
文件读写、网络连接和设备访问都可能阻塞。应结合非阻塞接口、事件通知或有限超时处理。队列数据很多时,每轮限制处理数量,避免单个任务占满主循环。日志与界面可按实际需求独立组织。
这种结构适合任务数量有限、步骤可拆分的程序;计算耗时很长的工作需要另外安排,不能靠轮询自动解决。
返回文章列表 ↑