当前位置:编程学习 > wap >>

急~急~ QMovie 文件句柄泄露的问题,求解



可执行程序中会周期调用下面这段代码,调试中发现这段会发生文件句柄泄露,运行到一定时间后台就会报打开的文件数过多。我把下面的m_Movie->start();这行注销掉,就没有泄露的问题,请大家帮忙分析一下。


if ((tmp==".gif")||(tmp==".GIF"))
{
// 缓存目录中没有该图片,需要向文件服务获取,暂时无版本比较功能
if ( ! QFile::exists(path_name) )
{
m_pGraphEnv->GetDataAccessInterface()->SelectFileFromFileServer(path_name,PATH_TYPE_BACKPIXMAP);
}

                m_Movie = new QMovie(this);
m_Movie->setCacheMode(QMovie::CacheAll);
m_Movie->stop();

m_Movie->setFileName(path_name);
                connect(m_Movie,SIGNAL(frameChanged(int)),SLOT(movieUpdated()));
m_Movie->start();

                //connect(m_pNextImageTimer, SIGNAL(timeout()),SLOT(movieUpdated()));
m_Name=pix_name.toLocal8Bit().constData();

                m_IsGif = true;
return true;
}
else
{
                m_IsGif = false;
}
。。。。。。。。 --------------------编程问答-------------------- 周期性调用!!那你需要生成多少 QMovie实例呀。时间久了当然句柄数不够啦。建议你在m_Movie = new QMovie(this);之前先删除老的QMovie实例m_Movie,如
if(m_Movie){
    m_Movie->stop();
    delete m_Movie;
    m_Movie = 0;
} --------------------编程问答-------------------- 最好将你的m_Movie实例化和connect操作全部移出到初始化阶段。 --------------------编程问答--------------------  QMovie实例已经在析构的时候释放掉了,这里应该是可以保证的。现象是我把start()封掉,就不存在泄漏。
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,