• 15633阅读
  • 5回复

【提问】qt分析:有关QObject::deleteLater()延迟删除 [复制链接]

上一主题 下一主题
离线mavis
 
只看楼主 倒序阅读 楼主  发表于: 2005-12-08
请各位QT高手来分析QObject::deleteLater()这个方法到底是怎么执行的?,这个方法里只有一句话:
QApplication::postEvent(this, new QEvent(QEvent::DeferredDelete));
那么执行了这个postEvent之后,它做了什么事情? 什么时候才把该对象删除?
谢了!
[ 此贴被XChinux在2005-12-08 19:37重新编辑 ]
离线myer

只看该作者 1楼 发表于: 2005-12-08
post后,立刻返回,仅仅告诉消息处理部分应该把这个对象删除,但并没有立即执行。
考虑到线程安全性,应该是在该消息循环处理到该消息后把该对象删除。
http://user.qzone.qq.com/56430808
离线mavis
只看该作者 2楼 发表于: 2005-12-08
在这里用postEvent的目的是什么?能详细说明吗?谢谢!
假如我立即执行了会有什么后果?
[ 此贴被mavis在2005-12-08 16:07重新编辑 ]
离线myer

只看该作者 3楼 发表于: 2005-12-08
目的应该在于考虑到线程安全性
执行postEvent后,在稍后的消息处理中应该被删掉,但是并不立即执行。
具体参考Qt的MOC机制,以及Qt的多线程模块。
http://user.qzone.qq.com/56430808
离线mavis
只看该作者 4楼 发表于: 2005-12-09
我试过了,把QObject::deleteLater()方法的
QApplication::postEvent(this, new QEvent(QEvent::DeferredDelete));
改成 delete this;
重新编qt及我的程序,结果对我程序没有任何影响。这说明这个postEvent(this, new QEvent(QEvent::DeferredDelete))并不起什么作用嘛。
离线avacool
只看该作者 5楼 发表于: 2005-12-10
你这个“这说明这个postEvent(this, new QEvent(QEvent::DeferredDelete))并不起什么作用嘛。
”有点武断吧。

大家讨论一下这种情况吧,我没怎么想明白。
void qxxx :: func()
{
k++;
if(k>20)
{
  emit errorXXXX();
  k = 0;         //focus here plz!
}
}
////////////////////////////////
qyyy:qyyy()
{
m_pXXXX = new qxxx;
connect(m_pXXXX,SIGNAL(errorXXXX()),this,SLOT(errorHandle));
}

void qyyy::errorHandle()
{
  delete m_pXXXX;
  m_pXXXX = NULL;
}

写得很丑,不过大家应该看得明白:)
快速回复
限100 字节
 
上一个 下一个