|
[code:1]
void runtask()
{int i;
long int timeuse;
struct timeval tpstart,tpend;
while(1)
{for(i=0;i<TASKNUM;i++)
{if(tasklt[i].use!=0&&tasklt[i].time_val==0)
{tasklt[i].func(tasklt[i].arg);
tasklt[i].use=0;
}
else if(tasklt[i].use!=0&&tasklt[i].time_val>0)
{gettimeofday(&tpstart,NULL);
//usleep(100000);
gettimeofday(&tpend,NULL);
timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+(tpend.tv_usec-tpstart.tv_usec);
tasklt[i].time_val-=timeuse;
printf("tasklt[%d].time_val=%ld\n",i,tasklt[i].time_val);
if(tasklt[i].time_val<=0)
{tasklt[i].func(tasklt[i].arg);
tasklt[i].use=0;
}
}
}
//usleep(10000);
}
}
[/code:1]
我写了这么个函数,实现当tasklt.time_val时间值减少到0时执行tasklt.func指向的函数.tasklt.use是使用标志位,1代表同数组中参数可使用. 编译通过,但是程序中两个usleep,无论我打开谁,执行到那里就直接跳出循环.关上就能执行,但是执行完有效参数后仍然要退出while循环,怎么可能呢???while(1)不是应该无限循环吗?? 搞的头大了,各位大虾帮忙看看~!(我在另外一个程序中有使用和这个几乎一样的定时执行的方式,在那个程序中却没有问题) |
|