List使用疑义-list iterator not dereferenceable

List使用疑问--list iterator not dereferenceable
大家好:

我最近在写一个DSP与上位机数据传输的MFC程序,使用Socket套接字。

在MFC程序中,主线程负责接收数据,接收到的数据按4字节转化为UINT32类型存进一个STL list双向链表中,同时开启一个子线程,负责从list中取出数据进行处理(子线程开启的更早,一直在等待)。

主线程部分很简单,只是把数据放进链表
list<UINT32> Data;
UINT32 sslen;
Data.push_back(sslen);

子线程负责从list中取出数据进行处理,它开启的更早,一直在等待,Data中有数据才处理,并且取出一个数据之后马上将这个数据从链表中删除;

UINT ThreadFunc(LPVOID pParm)//线程函数的定义
{
CAFM_TestDlg *pInfo=(CAFM_TestDlg*)pParm;
list<UINT32>::iterator t;

while (1)//一直循环处理
{
int sslen;
                t = pInfo->Data.begin();
while(t!=pInfo->Data.end())//使用迭代器遍历list,等待,直到Data中有数据
{
                       //取出数据处理
pInfo->R_LEN = *t;

int iiLen=(pInfo->R_LEN-sizeof(UINT32))/(sizeof(UINT32)*5);

if (iiLen*5+2>pInfo->Data.size()-pInfo->m_i)//判断数据包知否完整,不完整继续等待
{
break;
}
t = pInfo->Data.erase(t);  
pInfo->R_CMD = *t;
        t = pInfo->Data.erase(t);  

pInfo->m_i+=iiLen*5+2;

for(int k=0;k<iiLen;k++)
{
pInfo->R_Mode = *t;
t = pInfo->Data.erase(t);  

pInfo->R_Sum = *t;
t = pInfo->Data.erase(t);  

pInfo->R_Vz = *t;
t = pInfo->Data.erase(t);  

pInfo->R_Updown = *t;
t = pInfo->Data.erase(t);  

pInfo->R_Leftright = *t;
t = pInfo->Data.erase(t);  
                       }

}
}

return 0;
}

在开始处理的时候正常运行,运行一段时间之后会出错:list iterator not dereferenceable

请大家帮忙看看,谢谢!
------解决思路----------------------
多线程访问同一个list?加锁了吗?
------解决思路----------------------
mutex或cirticalsection
------解决思路----------------------
iterator 会错误
你用 了iterator以后,只能自己保证 iterator 没问题
因为你在 频频使用删除操作
这个操作通常会使 iterator 失效