2016-04-05 59 views
0

在運行期間,我收到錯誤消息:「pure vitual function called」。QThreadPool調用父類的純虛函數QRunnable

QThreadpool似乎調用父類QRunnablepure virtual void run(),而不是在派生類Bm中關閉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; 
} 

我的問題:爲什麼要犯規Qthreadpool使用Bm::run()超過QRunnble::run()

+1

嘗試在從main()返回之前調用pool.waitForDone()。看起來b_1在線程開始之前被刪除... – Archie

+0

謝謝。這工作。我現在該怎麼辦?我是否刪除該問題是因爲我的問題的答案看起來微不足道,或者應該有發佈的答案? – FruitSokrat

+0

我認爲你的問題是完全有效的,並可能幫助其他人。 – Archie

回答

1

即使在QThreadPool調用IRunnable::run()之前,線程對象在退出main()函數範圍時也會被刪除。在返回之前使用QThreadPool::waitForDone()將確保正在執行的線程。