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 に答える