1

有没有办法防止在插槽内创建的线程在插槽完成后被销毁?

    <widget.cpp>

    ...
    void Widget::<slot_name>()
    {
        ...
        ThreadTask Watcher; //ThreadTask is defined in header file
        QThread WatcherThread;
        Watcher.moveToThread(&WatcherThread);
        QObject::connect ...
        WatcherThread.start();
        ...
    }

我知道我可以在插槽之外声明线程并仅从它开始,但问题是,如果再次触发相同的插槽,我想创建另一个线程。

4

1 回答 1

6

使用动态分配

QThread* WatcherThread = new Qthread();

请注意,您必须在线程执行完成后将其删除,以避免内存泄漏。

如果您使用以下代码,Qt 可以在线程完成时自动删除线程:

connect(WatcherThread , SIGNAL(finished()),
    WatcherThread , SLOT(deleteLater()));
于 2013-01-09T12:15:02.540 回答