Linux 的 jiffies 是一个unsigned类型, time_after 宏是通过把两个时间转成signed来比较。
这里有一个前提,两个时间相差不超过jiffies最大值的一半,即使在32位系统上HZ=1000,这个时间也有25天.
#include <stdio.h> int main (void) { unsigned char a = 254; unsigned char b = 254; int i; for (i = 0; i <= 256; i++, a++) { printf ("Unsigned: %u - %d = %d Signed: %d - %d = %d\n", (unsigned int)a, (unsigned int)b, (int) (a - b), (int) (char)a, (int)(char)b, (int) ((char)a - (char)b)); } return 0; }