这个时间溢出的条件是什么?
/*
在我们的系统中,溢出通常出现在时间处理上;
系统时钟一般使用两个ULONG表示时间,精确到毫秒;
上层软件使用时间时一般忽略掉高位,只保留低32位。对于LONG的情况,25天后翻转;对于ULONG的情况,49天后翻转;
如果没有特殊的需要,建议使用系统提供的精确到秒的32位时钟,在LONG情况下60年翻转,基本可以不考虑这件事情;
如果一定要使用毫秒钟,就需要考虑时钟翻转的情况;
*/
#define DEFAULT_EXPIRE_TIME 300000 /* 5分钟 */
void ARPRecordExpireTime(ARP_Entry_s *pArpEntry)
{
/* 计算表项预计老化时的时间,以系统启动以来的毫秒数表示 */
pArpEntry->ulExpireTime = GetBootTime() + DEFAULT_EXPIRE_TIME;
return;
}
void* ARPExpire( ARP_Entry_s *pArpEntry)
{
ARP_Entry_s* pArpNext;
while(pArpEntry)
{
if (GetBootTime() < pArpEntry->ulExpireTime)
/* ULONG溢出如何处理?包括ExpireTime溢出、GetBootTime溢出*/
/* 解决方案作为思考题 */
{
break;
}
pArpNext = pArpEntry->pNext;
Free(pArpEntry);
pArpEntry = pArpNext;
}
return (void *)pArpEntry;
}
[解决办法]
对于反转问题。。你可以定义一个LONGLONG类型(64位),这样就不用反转了。。再简单点,你可以定义一个结构体,包含时、分、秒、毫秒,这样也不用反转了。。