c++ - QT 正常结束线程后,还需要delete线程对象以回收资源吗?
PHPz
PHPz 2017-04-17 14:49:04
0
2
612

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()));
PHPz
PHPz

学习是最好的投资!

全員に返信(2)
小葫芦

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

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

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

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

    いいねを押す +0
    黄舟

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

    する必要があります。
    いいねを押す +0
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート