65,211
社区成员
发帖
与我相关
我的任务
分享
typedef list<stUserListNode *> UserList;
for (UserList::iterator UserIterator = pThis->ClientList.begin();
UserIterator != pThis->ClientList.end();
++UserIterator) //这里面ClientList已经有一个元素
{
if (*UserIterator !=NULL)
{
//调试时看的测试数据start .............
currentuser->ip = (*UserIterator)->ip; //第一次客户端非法离线后,用户确实从列表删除了,但是由于元素只有1个,却继续for 循环,导致程序非法操作
currentuser->port = (*UserIterator)->port;
strcpy(currentuser->userName , (*UserIterator)->userName);
currentuser->dwLastActiveTime = (*UserIterator)->dwLastActiveTime;
DWORD dwTemp = (*UserIterator)->dwLastActiveTime;
//调试时看的测试数据end .............
if ((dwTick - dwTemp) >= (2 * 30 * 1000)) //大于2次轮询间隔都不在的话,则表示已经离线了
{
pThis->ClientList.remove(*UserIterator); //从用户列表中删除该用户
}
}
}
for (UserList::iterator UserIterator = pThis->ClientList.begin();
UserIterator != pThis->ClientList.end();
) //这里面ClientList已经有一个元素
{
if (*UserIterator !=NULL)
{
//调试时看的测试数据start .............
currentuser->ip = (*UserIterator)->ip; //第一次客户端非法离线后,用户确实从列表删除了,但是由于元素只有1个,却继续for 循环,导致程序非法操作
currentuser->port = (*UserIterator)->port;
strcpy(currentuser->userName , (*UserIterator)->userName);
currentuser->dwLastActiveTime = (*UserIterator)->dwLastActiveTime;
DWORD dwTemp = (*UserIterator)->dwLastActiveTime;
//调试时看的测试数据end .............
if ((dwTick - dwTemp) >= (2 * 30 * 1000)) //大于2次轮询间隔都不在的话,则表示已经离线了
{
UserIterator = pThis->ClientList.erase(UserIterator); //从用户列表中删除该用户
}
else
{
++UserIterator;
}
}
else
{
++UserIterator;
}
}
for (UserList::iterator UserIterator = pThis->ClientList.begin();
UserIterator != pThis->ClientList.end();
) //这里面ClientList已经有一个元素
{
if (*UserIterator !=NULL)
{
//调试时看的测试数据start .............
currentuser->ip = (*UserIterator)->ip; //第一次客户端非法离线后,用户确实从列表删除了,但是由于元素只有1个,却继续for 循环,导致程序非法操作
currentuser->port = (*UserIterator)->port;
strcpy(currentuser->userName , (*UserIterator)->userName);
currentuser->dwLastActiveTime = (*UserIterator)->dwLastActiveTime;
DWORD dwTemp = (*UserIterator)->dwLastActiveTime;
//调试时看的测试数据end .............
if ((dwTick - dwTemp) >= (2 * 30 * 1000)) //大于2次轮询间隔都不在的话,则表示已经离线了
{
UserIterator = pThis->ClientList.erase(*UserIterator); //从用户列表中删除该用户
}
else
{
++UserIterator;
}
}
else
{
++UserIterator;
}
}
pThis->ClientList.remove(*UserIterator++); //从用户列表中删除该用户
if ((dwTick - dwTemp) >= (2 * 30 * 1000)) //大于2次轮询间隔都不在的话,则表示已经离线了
{
if(UserIterator == pThis->ClientList.end() - 1)
{
pThis->ClientList.remove(*UserIterator);--UserIterator; //在这防止指针越界
}else
pThis->ClientList.remove(*UserIterator); //从用户列表中删除该用户
}
if ((dwTick - dwTemp) >= (2 * 30 * 1000)) //大于2次轮询间隔都不在的话,则表示已经离线了
{
pThis->ClientList.remove(*UserIterator); //从用户列表中删除该用户
if(UserIterator-1 == pThis->ClientList.end()) break;//我猜的,呵呵,在这判断一下
}