网络编程中整体架构上使用 select 做定时器 和 fd 检测使用。
select做定时器和大循环的主要检测函数
select 函数作为定时器 和 系统的循环处理功能架构
-
int main(int argc, char **argv)
-
{
-
//初始化系统参数和配置
-
-
struct timeval timer_now;
-
while()
-
{
-
gettimeofday (&timer_now, NULL);
-
//一、增加保存上一次时间的函数
-
//二、增加判断time_now和上一次保存time的比较函数
-
if(time_out_flag == TRUE)
-
{//三、增加超时处理,即定时函数,并且更新time_wait变量
-
//定时处理函数,将上次第二步上比较后的超出时间计算出来。
-
//更新time_wait的值为TIME_OUT - 超出时间。
-
}
-
else
-
{
-
//四、增加fd变化后,但是未超时,更新time_wait的值为TIME_OUT - 超出时间。
-
}
-
num = select (FD_SETSIZE, &readfd, &writefd, &exceptfd, timer_wait);
-
//timer_wait 是定时设置的超时时间。
-
-
if (num == 0)
-
continue;
-
-
if (num < 0)
-
{
-
if (errno == EINTR)
-
continue;
-
-
printf ("select() error: %s", strerror (errno));
-
}
-
//五、添加fd检测到变化的处理代码。
-
}
-
-
}
此过程只作为参照,也已经验证,定时器设置的超时时间是500ms,验证结果还是比较准确的,整体系统看起来也比较简单。
后续会增加网络编程中的触发定时器,定时器中有触发fd变化,然后在select中检测fd变化后,触发回调函数的过程。基本同次编写的内容。
阅读(1725) | 评论(0) | 转发(0) |