计算事件的间隔时间差

旧城等待, 2022-12-21 04:45 171阅读 0赞

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

  1. if((x->tv\_sec == y->tv\_sec) && (x->tv\_usec > y->tv\_usec))
  2. return -1;
  3. result->tv\_sec = (y->tv\_sec - x->tv\_sec);
  4. result->tv\_usec = (y->tv\_usec - x->tv\_usec);
  5. if(result->tv\_usec < 0)
  6. \{
  7. result->tv\_sec--;
  8. result->tv\_usec += 1000000;
  9. \}
  10. return 0;

}

void my_msleep(unsigned long mSec)
{
struct timeval tv;
int err = 0;

  1. tv.tv\_sec = mSec / 1000;
  2. tv.tv\_usec = (mSec % 1000) \* 1000;
  3. do
  4. \{
  5. err = select(0, NULL, NULL, NULL, &tv);
  6. \} while((err < 0) && (errno == EINTR));

}

int calculate_interval_time(int interval_time)
{
struct timeval tpstart,tpend,diff;
int diff_ns = 0, ret = 0;

  1. gettimeofday(&tpstart, NULL);
  2. my\_msleep(interval\_time);
  3. gettimeofday(&tpend, NULL);
  4. ret = timeval\_subtract(&diff, &tpstart, &tpend);
  5. if(ret == 0)
  6. \{
  7. diff\_ns = diff.tv\_usec \* 1000 + diff.tv\_usec / 1000;
  8. printf("interval time: %d ms\\n", diff\_ns/(1000\*1000));
  9. \}
  10. return 0;

}

发表评论

表情:
评论列表 (有 0 条评论,171人围观)

还没有评论,来说两句吧...

相关阅读