2016-04-05 29 views
0

実行時にエラーメッセージ "純粋なvitual関数が呼び出されました"が表示されます。QThreadPoolは親クラスQRunnableの純粋仮想関数を呼び出します

QThreadpoolではなく、派生クラスBmvoid run()オフ、親クラスQRunnablepure virtual void run()を呼んでいるようです。 b_1.run();で手作業で関数を呼び出すと、ランタイム中に問題はありません。ここで

は私のクラスのimplentationである:ここで

class Bm : public QRunnable 
{ 
    public: 
    void run() 
    { 
     test(); 
    } 
    private: 
     void test(); 
}; 

は、エラーが発生した私の主な機能です。

int main() 
{ 
    QThreadPool pool; 
    pool.setMaxThreadCount(1); 
    BM b_1; 

    pool.start(&b_1); 

    return 0; 
} 

私の質問:なぜdoesntのQthreadpool QRunnble::run()Bm::run()を使うのか?

+1

main()から戻る前にpool.waitForDone()を呼び出してみてください。スレッドが開始される前にb_1が削除されたようです... – Archie

+0

ありがとうございます。これはうまくいった。私は今これを持っていますか?私の問題への答えが些細なものか、投稿された回答があるべきなので質問を削除しますか? – FruitSokrat

+0

あなたの質問は完全に有効だと思って、他の人を助けるかもしれません。 – Archie

答えて

1

QThreadPoolIRunnable::run()になる前に、main()関数スコープから外に出るとスレッドオブジェクトが削除されます。返す前にQThreadPool::waitForDone()を使用すると、実行中のスレッドが保証されます。

関連する問題