我在多线程环境中使用CList,并且一直存在GetHead方法的问题。我有一个线程将数据添加到列表中,另一个线程从列表中读取和删除数据。 这里是阅读部分:在多线程环境中使用CList
value_type get_next()
{
T t;
if(!queue.IsEmpty()) {
t = queue.GetHead();
}
return t; //If the queue is empty we return an empty element
}
这里是插入部分:
inline void insert(T &_in)
{
queue.AddTail(_in);
}
这里是去除部
inline void pop_next()
{
if(!queue.IsEmpty()) {
queue.RemoveHead();
}
}
为什么我得到一个运行时错误,当我运行这个。它总是在
t = queue.GetHead();
失败有了这个断言:
template<class TYPE, class ARG_TYPE>
AFX_INLINE TYPE& CList<TYPE, ARG_TYPE>::GetHead()
{ ENSURE(m_pNodeHead != NULL);
return m_pNodeHead->data; }
虽然m_pNodeHead值为:
- pNext 00000000 {pNext = ??? pPrev = ??? data = {...} } CList>>,ATL :: CStringT>> &> :: CNode *
- pPrev 0x00000000 {pNext = ??? pPrev = ???数据= {...}} 栏列表>>,ATL :: CStringT>> &> :: CNode *
- 数据 “” TESTSETSE ATL :: CStringT>>
什么错误的是,当我切换到std :: deque,它的工作真的很好,我只需要改变函数(即IsEmpty()为空())。为什么不会CList工作在哪里std ::德克呢? – Drahakar 2009-06-13 00:46:53