读书人

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

发布时间: 2013-11-11 14:02:17 作者: rapoo

求解,关于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之后,你的序列已经发生变化了,你那个应该是隔行删除的吧。

读书人网 >C++

热点推荐