计算事件的间隔时间差
/*
*功能:计算两个时间的间隔,得到时间差
*resule:返回计算出来的时间
*x:需要计算的前一个时间
*y:需要计算的后一个时间
*return: -1 失败, 0 成功
*/
int timeval_subtract(struct timeval* result, struct timeval* x, struct timeval* y)
{
if(x->tv_sec > y->tv_sec)
return -1;
if((x->tv\_sec == y->tv\_sec) && (x->tv\_usec > y->tv\_usec))
return -1;
result->tv\_sec = (y->tv\_sec - x->tv\_sec);
result->tv\_usec = (y->tv\_usec - x->tv\_usec);
if(result->tv\_usec < 0)
\{
result->tv\_sec--;
result->tv\_usec += 1000000;
\}
return 0;
}
void my_msleep(unsigned long mSec)
{
struct timeval tv;
int err = 0;
tv.tv\_sec = mSec / 1000;
tv.tv\_usec = (mSec % 1000) \* 1000;
do
\{
err = select(0, NULL, NULL, NULL, &tv);
\} while((err < 0) && (errno == EINTR));
}
int calculate_interval_time(int interval_time)
{
struct timeval tpstart,tpend,diff;
int diff_ns = 0, ret = 0;
gettimeofday(&tpstart, NULL);
my\_msleep(interval\_time);
gettimeofday(&tpend, NULL);
ret = timeval\_subtract(&diff, &tpstart, &tpend);
if(ret == 0)
\{
diff\_ns = diff.tv\_usec \* 1000 + diff.tv\_usec / 1000;
printf("interval time: %d ms\\n", diff\_ns/(1000\*1000));
\}
return 0;
}
还没有评论,来说两句吧...