new QThread 几时终结

new QThread 何时终结?
void FindDialog::doQuery()
{
w = new Worker;
qDebug()<<"=MainThread["<<QThread::currentThreadId();//<<"] ("<<concurrent<<")"; 
th = new QThread(this);
connect(th,SIGNAL(started()),w,SLOT(slot1()));
connect(th,SIGNAL(finished()),w,SLOT(deleteLater()));//this destroy work object.
connect(th,SIGNAL(finished()),this,SLOT(deleteWorker()));//destroy sub-thread
w->moveToThread(th);
th->start();  
}

void FindDialog::deleteWorker()
{
     //when to destroy th?
    qDebug()<<"delete thread pointer in Main.";
}

void Worker::slot1()

    qDebug()<<"-- thread["<<QThread::currentThreadId()<<"]";
 
    tmpTime.start();
    m_db.transaction();
    for (int i = 0 ; i < 100000 ; i++ )
    {
        QString str3 = QString("insert into test(content) values('[Checked]')");
        m_query->exec(str3); 
    } 
    m_db.commit();
    qDebug()<<"Time Elapsed: "<<tmpTime.elapsed()<<" ms";
    if (m_query->lastError().isValid())
        qDebug()<<"#"<<m_query->lastError() ; 
    qDebug()<<"query done.";
    QThread().thread()->quit();
    QThread().thread()->wait();

    emit sig1();//sent to main thread to teminate me.
}




我在主界面窗口里new 了一个工作对象 new 了一个工作线程,将worker放到线程里做数据库查询。
现在问题是线程结束时如何终止是安全的?
我试过2种办法,好像大多数时候都运行正常的。
1, slot 函数里任务执行完了,发射信号到主窗口,然后主窗口有线程的指针,终结线程并删除指针。
2, slot函数里调用静态方法,就是我上面标示出来的,这是QT的方法,但我不确定还要不要删除thread指针了。(我试过了,无法删除,容易出错)。

所以1,2执行一次都会成功的,甚至3-5次都没问题。但我连续不停点击,一口气点十几下,它就异常退出了。不明原因。如果是用方法1,我想可能是后来的线程删除掉了前面的线程指针。但方法2我就不知道为什么还出来这种状(除非qtthread 在connect 下是不安全的)???

------解决思路----------------------
《Windows核心编程》