検索

ホームページ  >  に質問  >  本文

c++ - QT 正常结束线程后,还需要delete线程对象以回收资源吗?

QT 的线程正常退出后,是否还需要delete对象,以避免内存泄漏?

//从QThread继承出线程ThreadOnce
class ThreadOnce:public QThread
{
    Q_OBJECT
    void run() Q_DECL_OVERRIDE;
};

//重写run方法,里面不是死循环,跑完后就正常退出线程
void ThreadOnce::run()
{
    int i=0;    
    while(i<20)
    {
        std::cout<<i<<std::endl;
        i++;
    }
}

//是否有必要作如下的信号槽连接(this指向ThreadOnce的实例),来delete ThreadOnce的实例。
connect(this,SIGNAL(finished()),this,SLOT(deleteLater()));
PHPzPHPz2814日前620

全員に返信(2)返信します

  • 高洛峰

    高洛峰2017-04-17 14:51:04

    私の理解では、QThread はスレッド管理クラスのみを提供しており、これを使用する場合は、スレッド オブジェクトを作成した後でも、 を呼び出すことができます。 > start() 関数は、run() 関数をトリガーして、スレッドの実行を開始します。実行中にデータを記録すると、これらのデータは通常、次の場所に保存されます。データメンバー関数内で、スレッドが終了した後、オブジェクトのメモリをすぐに解放すると、スレッド オブジェクトを通じて結果を取得できなくなります。

    <オル>
  • スレッド オブジェクトを使用していない場合は、解放できます。

  • スレッドを終了する必要がなくなったら、スレッドを解放します。

  • このスレッドが頻繁に使用される場合は、メイン フォーム ポインタをスレッドの親として使用します。親が解放されると、Qt のメモリ管理に従って、子のメモリも自動的に解放されます。

    返事
    0
  • 黄舟

    黄舟2017-04-17 14:51:04

    ~~delete かどうかは、ThreadOnce オブジェクトの作成方法によって異なります
    これが基本であり、オブジェクトはヒープ上にありますもちろん、自分で削除

    する必要があります。

    返事
    0
  • キャンセル返事