/* Operations on timevals. */
(((tvp)->tv_sec == (uvp)->tv_sec) ? \
((tvp)->tv_usec cmp (uvp)->tv_usec) : \
do { \
(vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; \
(vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec; \
if ((vvp)->tv_usec >= 1000000) { \
(vvp)->tv_sec++; \
(vvp)->tv_usec -= 1000000; \
} \
do { \
(vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \
(vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \
if ((vvp)->tv_usec < 0) { \
(vvp)->tv_sec--; \
(vvp)->tv_usec += 1000000; \
} \
} while (/* CONSTCOND */ 0)
将时间结构数据归0,0L表示长整型的0,在此注意到秒、微秒等都是长整型。
#define timerclear(tvp)(tvp)->tv_sec = (tvp)->tv_usec = 0L
时间是否已经设置成功(是否为0),如果成功则,返回1(逻辑真)
#define timerisset(tvp)((tvp)->tv_sec || (tvp)->tv_usec)
本博客所有内容是原创,如果转载请注明来源
http://blog.csdn.net/myhaspl/
可实现两个时间比较,如果秒数相等,再比较微秒,否则直接比较秒数,比较操作符通过cmp参数传送
#define timercmp(tvp, uvp, cmp) \(((tvp)->tv_sec == (uvp)->tv_sec) ? \
((tvp)->tv_usec cmp (uvp)->tv_usec) : \
((tvp)->tv_sec cmp (uvp)->tv_sec))
时间相加,先秒相加,然后实现微秒的相加后再进位。
#define timeradd(tvp, uvp, vvp) \do { \
(vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; \
(vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec; \
if ((vvp)->tv_usec >= 1000000) { \
(vvp)->tv_sec++; \
(vvp)->tv_usec -= 1000000; \
} \
} while (/* CONSTCOND */ 0)
时间相减,先秒相减,然后实现微秒的相减后再退位。
do { \
(vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \
(vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \
if ((vvp)->tv_usec < 0) { \
(vvp)->tv_sec--; \
(vvp)->tv_usec += 1000000; \
} \
} while (/* CONSTCOND */ 0)