我正在编写一个保存两个输入插座的FIFO队列的套接字程序.当决定要服务的队列时,程序从每个队列中拉出最近的时间戳.
我需要一个比较两个时间结构的可靠方法.我尝试使用timercmp(),但我的gcc版本不支持它,而且文档规定该功能不符合POSIX标准.
我该怎么办?
解决方法
谷歌时间给
this first result.从那个页面:
通常需要减去struct timeval或struct timespec的两个值.这是最好的方法.即使在某些特殊的操作系统中,tv_sec成员具有无符号类型,它也可以工作.
/* Subtract the `struct timeval' values X and Y,storing the result in RESULT. Return 1 if the difference is negative,otherwise 0. */ int timeval_subtract (result,x,y) struct timeval *result,*x,*y; { /* Perform the carry for the later subtraction by updating y. */ if (x->tv_usec < y->tv_usec) { int nsec = (y->tv_usec - x->tv_usec) / 1000000 + 1; y->tv_usec -= 1000000 * nsec; y->tv_sec += nsec; } if (x->tv_usec - y->tv_usec > 1000000) { int nsec = (x->tv_usec - y->tv_usec) / 1000000; y->tv_usec += 1000000 * nsec; y->tv_sec -= nsec; } /* Compute the time remaining to wait. tv_usec is certainly positive. */ result->tv_sec = x->tv_sec - y->tv_sec; result->tv_usec = x->tv_usec - y->tv_usec; /* Return 1 if result is negative. */ return x->tv_sec < y->tv_sec; }