最近在做一个远程视频和屏幕传输程序,出现了一个很奇怪的现像,代码如下:
m_recJpg是一个TJpgImage动态创建的对像,有图片信息
VideoRemote是放在窗体上的一个TImage控件下面是不断的更新内容的部分代码.代码一秒种大约运行15次,在主窗体中运行,没有在线程中。
    VideoRemote.Picture.Bitmap.Canvas.Lock;
      try
        VideoRemote.Picture.Bitmap.Assign(m_RecJpg);
      finally
        VideoRemote.Picture.Bitmap.Canvas.Unlock;
    end;
以上代码加入后就会出现内存泄露的问题,不加都很正常。加入后VideoRemote上能正常显示视频,如果用鼠标点击,移动窗体时,有可能出现内存泄露问题,但如果没有去动。都比较正常

解决方案 »

  1.   

    报错的图片可以下面的网址中拿到
    http://www.fzyw.cn/111.jpg
      

  2.   

    可能是窗体重绘的时候跟我自己去重绘TImage控件发生冲突
      

  3.   

    这种代码出错要怎么跟踪,一般出错后都断点都直接停在Application.RUN处了。
      

  4.   

    查出出现这种现像的本质原因了,但没有解决办法。移动窗口/盖住后新显示导致窗口重绘的时候,正好我的程序也在重绘那个TImage控件。可能是两个线程都在想要重绘这个窗口,冲突造成的。
      

  5.   

    VideoRemote.Picture.Bitmap.Assign(m_RecJpg);执行的时候你能保证m_RecJpg 是存在的嘛?
      

  6.   

    刚才把代码改了,把lock去掉了。效果好多了。
      

  7.   

    TImage控件操作的时候加点延时看看我用TImage。loadfromfile时两次连续执行就要加延时,不然就会显示
    Access violation at address 005A08e6 in module'bjhighspeedsys.exe'.Write of address 04d23c82
      

  8.   

    检查下 VideoRemote  和 m_RecJpg 的内存情况 在运行的时候断点   如果没问题 那就是其他方面的问题了
      

  9.   

    再谈enum-=运算[抛砖引玉] 
      

  10.   

    1. 检查m_RecJpg时候释放
    2. 在适当的位置写 VideoRemote.Picture := nil