2013-01-09 90 views
1

有沒有一種方法可以防止在插槽完成後插槽內創建的線程被破壞?Qt - 在插槽完成後不要破壞線程

<widget.cpp> 

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

我知道我可以宣佈插槽外螺紋,只有從它開始吧,但事情是,我想,如果相同的插槽被再次觸發創建另一個線程。

+1

你似乎不知道堆了一些C++基礎知識和堆棧分配:當它完成,如果你使用下面的代碼

的Qt可以自動刪除該線程。閱讀一些很好的C++書籍,至少需要C++基礎知識才能使用Qt –

+0

的確如此,過去我一直在做很多腳本,最近才轉向OOP,但我一直在按順序思考,就像在腳本中一樣。 – Chris

回答

6

使用dynamic allocation

QThread* WatcherThread = new Qthread(); 

請注意,您必須刪除它當線程的執行,以避免內存泄漏已完成。

connect(WatcherThread , SIGNAL(finished()), 
    WatcherThread , SLOT(deleteLater())); 
+0

謝謝你,你太棒了,它完美的作品!我是OOP的新手。 – Chris

+0

不錯,再次感謝! – Chris

+0

那麼ThreadTask呢?它也應該通過堆分配 –