首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求解,关于CList的GetNext遍历出现的有关问题

2013-11-11 
求解,关于CList的GetNext遍历出现的问题本帖最后由 ReversalC 于 2013-11-04 15:00:46 编辑POSITION pos

求解,关于CList的GetNext遍历出现的问题
本帖最后由 ReversalC 于 2013-11-04 15:00:46 编辑

POSITION pos = m_theDestObjList.GetHeadPosition();
POSITION pos1 = NULL;
DestObj* ptheDestObj = NULL;

for (int i=0;i < m_theDestObjList.GetCount();i++)
{
pos1 = pos;
ptheDestObj = m_theDestObjList.GetNext(pos);// 这里的pos在什么情况下会为
             //NULL,还是我这种访问方式本身就有问题?求好心帮我解答这个问题,谢谢
if( 条件为真 )
{
lock();
m_theDestObjList.RemoveAt(pos1);
unlock();
}

// 做事...
}


唯一删除的地方只有这一个地,还有一个线程是增加,其他线程都是访问,且都加锁了

lock();
访问
unlock();
[解决办法]
仅供参考
//
// GetNumFreePins
//
int CTee::GetNumFreePins()
{
    int n = 0;
    POSITION pos = m_OutputPinsList.GetHeadPosition();
    while(pos) {
        CTeeOutputPin *pOutputPin = m_OutputPinsList.GetNext(pos);
        if (pOutputPin->m_Connected == NULL)
            n++;
    }
    return n;

} // GetNumFreePins

[解决办法]
你都没有说问题是什么呀。

你调用RemoveAt之后,你的序列已经发生变化了,你那个应该是隔行删除的吧。

热点排行