Я использую CList в многопоточной среде, и у меня продолжают возникать проблемы с методом GetHead. У меня есть один поток, который добавляет данные в список, и другой поток, который читает и удаляет данные из списка.
Вот часть чтения:
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 0x00000000 {pNext = ??? pPrev = ??? данные = {...}
} CList>>, ATL :: CStringT>> &> :: CNode *
- pPrev 0x00000000 {pNext = ??? pPrev = ??? данные = {...}
} CList>>, ATL :: CStringT>> &> :: CNode *
- data "" TESTSETSE ATL :: CStringT>>