/*
*功能:计算两个时间的间隔,得到时间差
*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;
}