读书人

这个时间溢出的条件是什么?解决办法

发布时间: 2013-01-06 15:44:47 作者: rapoo

这个时间溢出的条件是什么?

/*
在我们的系统中,溢出通常出现在时间处理上;

系统时钟一般使用两个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位),这样就不用反转了。。再简单点,你可以定义一个结构体,包含时、分、秒、毫秒,这样也不用反转了。。

读书人网 >C语言

热点推荐