DLL多线程+STL::deque的问题,公司没有人能解决.

TrojanSckiss 2006-05-02 04:17:38
症状:把一个复杂的结构入STL::deque队列后,取出来后结构中的一个LPWORD型的变量的值发生了改变,这个可能是什么原因造成的,工程属性是DLL+Threads,该队列是一个全局变量,但是这里排除临界区的不正确使用,请问有可能是什么原因?刚开始我觉得STL在管理复杂结构有问题,于是单独写了个测试程序,没有什么问题?哪位经验丰富的大哥给我指条路吧,我在这个问题下折腾一个星期了,下面是一些相关的代码.
deque< LPSPIPARAMITEM,allocator<LPSPIPARAMITEM> > q; //使用STL标准队列
LPSPIPARAMITEM就是那个产生问题的复杂结构.
BOOL SpiQ::fnAdd(LPSPIPARAMITEM lpNewItem) //增加一个请求节点
{
q.push_back(lpNewItem);
//TRACE("\r\n@WatchDog:增加一个请求节点,SIZE:%d\r\n",q.size());
return TRUE;
}

BOOL SpiQ::fnDel(LPSPIPARAMITEM lpDelItem) //取出一个请求节点
{
//FIFO的 第一个节点出队
LPSPIPARAMITEM lpItem=q.front();
memcpy((LPVOID)lpDelItem,(LPVOID)lpItem,sizeof(SPIPARAMITEM));
//if(WFS_SUCCESS==WFMFreeBuffer(lpDelItem))
// TRACE("\r\n@WatchDog:WFMFreeBuffer(lpItem)成功\r\n");
q.pop_front();
return TRUE;
}
一共有4个线程,有些代码不便贴出,复杂结构变量入队前是好着的,取出来以后有的时候就变了,有的时候还没有变,不过过上2秒就变了,我曾经怀疑过是临界区的不正常使用的问题,但是检查并且跟踪代码,没有什么收获,眼睁睁的看着那变量被修改,大家多给点意见和经验,拜托啦.
...全文
167 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
TrojanSckiss 2006-05-03
  • 打赏
  • 举报
回复
谢谢二位!
TG1005 2006-05-02
  • 打赏
  • 举报
回复
眼睁睁的看着那变量被修改
用Ollydbg调试,找到那个变量,然后下硬件断点或者内存断点看看哪里修改的
DentistryDoctor 2006-05-02
  • 打赏
  • 举报
回复
最大的可能性还是同步不好造成的。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧