首页| 论坛| 消息

标题:【提问】qt分析:有关QObject::deleteLater()延迟删除
作者:mavis
日期:2005-12-08 14:43
内容:

请各位QT高手来分析QObject::deleteLater()这个方法到底是怎么执行的?,这个方法里只有一句话:
QApplication::postEvent(this, new QEvent(QEvent::DeferredDelete));
那么执行了这个postEvent之后,它做了什么事情? 什么时候才把该对象删除?
谢了!


#1 [myer 12-08 15:11]
post后,立刻返回,仅仅告诉消息处理部分应该把这个对象删除,但并没有立即执行。
考虑到线程安全性,应该是在该消息循环处理到该消息后把该对象删除。
#2 [mavis 12-08 15:45]
在这里用postEvent的目的是什么?能详细说明吗?谢谢!
假如我立即执行了会有什么后果?
#3 [myer 12-08 16:17]
目的应该在于考虑到线程安全性
执行postEvent后,在稍后的消息处理中应该被删掉,但是并不立即执行。
具体参考Qt的MOC机制,以及Qt的多线程模块。
#4 [mavis 12-09 14:32]
我试过了,把QObject::deleteLater()方法的
QApplication::postEvent(this, new QEvent(QEvent::DeferredDelete));
改成 delete this;
重新编qt及我的程序,结果对我程序没有任何影响。这说明这个postEvent(this, new QEvent(QEvent::DeferredDelete))并不起什么作用嘛。
#5 [avacool 12-10 10:18]
你这个“这说明这个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;
}
写得很丑,不过大家应该看得明白:)

回复 发表
主题 版块