while等待的超时处理

[复制链接]
 楼主| youngz1990 发表于 2016-2-9 22:22 | 显示全部楼层 |阅读模式
请教一下各位,在某些通信中会用到while来等待,但是又不能死等,有什么好的办法来做超时处理呢,先谢过各位了。
xuyaqi 发表于 2016-2-10 05:40 | 显示全部楼层
用等待次数来判断到达一定次数直接退出循环。
 楼主| youngz1990 发表于 2016-2-10 10:44 | 显示全部楼层
xuyaqi 发表于 2016-2-10 05:40
用等待次数来判断到达一定次数直接退出循环。
  1. int i = 0;
  2. while( 条件 && i<1000 )
  3. {
  4.     i++;
  5. }

是不是像这样,在工程中用的多么
ghost2 发表于 2016-2-10 10:54 来自手机 | 显示全部楼层
while (get_timer() < expire_time && ...)
lovecat2015 发表于 2016-2-10 13:44 | 显示全部楼层
goto语句
xyz549040622 发表于 2016-2-10 19:34 | 显示全部楼层
goto真是个坏办法,等待一定时间没结果,就报个错退出吧。
linqing171 发表于 2016-2-10 19:43 | 显示全部楼层
int i=0;
while(1)
{
i++;
if(i>20)
break; /*break can be replaced with goto.*/
}
marshallemon 发表于 2016-2-10 20:12 来自手机 | 显示全部楼层
状态机轮转
coody 发表于 2016-2-10 20:50 | 显示全部楼层
等待,超时的话,带一个错误信息。
21ID 发表于 2016-2-10 22:03 来自手机 | 显示全部楼层
用定时器来做精确的timer处理!
cov0xt 发表于 2016-2-11 08:12 | 显示全部楼层
类似于高级语言的异步或者多线程,用C语言实现类似的架构
重庆酱油仔 发表于 2016-2-11 11:44 来自手机 | 显示全部楼层
if(条件成立),break;
 楼主| youngz1990 发表于 2016-2-11 11:58 | 显示全部楼层
嗯,定时器是个办法,在Free Modbus的实现里面超时用到了Timer和状态机,在等待数据的地方用Timer来定时,超时触发中断来判断数据是否正确,然后用状态机不断的轮询这样程序能够执行下去。但是用状态机是不是有一定的难度,因为我觉得轮询一次状态机的时间太长的话有可能要影响到其他的部分,大神们有没什么资料用来参考的啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

16

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部