我在多線程環境中使用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