CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

在1线程中用PostMessage往主窗体发消息,消息数据在堆中生成传指针到主窗体,但主窗体关闭时,可能线程还在发消息,造成内存泄漏,怎么解

楼主kufan(我是真的不会表达我的爱)2004-08-03 17:58:43 在 VC/MFC / 进程/线程/DLL 提问

1.线程不用SendMessage发消息  
  2.主窗体不准备用Wait...之类的同步函数,主要是防止主窗体阻塞消息处理  
   
  谁有好的方法,或者我的思路不正确? 问题点数:0、回复次数:6Top

1 楼lilylovey(楚云飞)回复于 2004-08-03 18:33:37 得分 0

你可以在主窗口中建立消息处理函数,在消息处理函数中处理你的指针数据。当主窗口关闭时,消息肯定发不出去了(发给谁?),此时可以中止你的线程,或者时挂起。  
        建议是数据在那里生成,在那里删除,就是在一个对象或者模块里去管理这些生成的内存块。当然也可以是用完就删除,但这样常常会出错。指针本身并不造成泄漏,而是你没有管理你生成的内存。Top

2 楼kufan(我是真的不会表达我的爱)回复于 2004-08-04 09:05:55 得分 0

线程在堆中生成消息数据,获得1指针,通过PostMessage将指针发给主窗体,主窗体处理消息然后delete堆数据,现在的问题是关闭主窗体时,线程还在产生堆消息数据,它PostMessage到主窗体时,主窗体可能已不能处理消息了,所以就不能delete堆数据,产生泄漏。  
  我没有做强制关闭线程的处理,大虾们都说这样不好,主窗体也没有使用Wait...之类的同步函数,我这样做有什么问题吗?Top

3 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-08-04 09:20:02 得分 0

其实不光是你说的内存泄漏,如果你是不断的调用PostMessage,还有可能造成堆被破坏。为防内存泄漏可以采用智能指针。Top

4 楼basboy(basboy)回复于 2004-08-04 09:42:02 得分 0

其实我觉得你违反了“在同一个层面上分配和释放内存的错误”,你看这样解决行么  
   
  class   mainwind()  
  {  
      .....  
       
      someobject   *   newobject()  
        {  
            if(FLASE==IsWindow(this->mhWnd))  
                        return   NULL;    
          //---在这里分配了内存  
              return   new(xxxxx)  
        }  
      private:  
         
   
  }  
   
  //----------thread---------------------//  
   
  someobject   *   p=mainwnd->newobject();  
  if(NULL!=p)  
  {  
      //--处理p对象----------//  
            .....  
      //-------------------//  
      postmessage(mainwnd->mhWnd,XXXX,p,0);  
   
  }  
   
  你觉得如何,这样分配和删除都是在mainwnd中进行的,非常好处理  
  Top

5 楼basboy(basboy)回复于 2004-08-04 09:42:44 得分 0

不然使用内存池也可以,要麻烦一点Top

6 楼kufan(我是真的不会表达我的爱)回复于 2004-08-04 09:46:42 得分 0

ok,思路很好,我试试。Top

相关问题

  • 父窗体指针
  • ★☆★线程指针的安全性问题☆★☆
  • this指针在线程中的传递
  • 怎样在工作线程中写主窗体状态栏
  • 线程中如何调用窗体的其他函数?
  • 关于线程 向 主窗体发送消息 的问题
  • 线程问题(进度条窗体实现)
  • 多线程操作窗体控件问题
  • 一个关于窗体多线程的问题
  • 线程中如何调用主窗体中的一组控件

关键词

  • 线程
  • 指针
  • 消息
  • 内存泄漏
  • 数据
  • 函数
  • 内存
  • 主窗体
  • 生成
  • postmessage

得分解答快速导航

  • 帖主:kufan

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
CSDN网站24小时值班电话:13552009689
Copyright © 2000-2009, CSDN.NET, All Rights Reserved
GongshangLogo