QThreadPool调用父类QRunnable的纯虚拟函数

QThreadPool calls pure virtual function of parent class QRunnable

本文关键字:虚拟 函数 QRunnable 调用 父类 QThreadPool      更新时间:2023-10-16

运行时,我收到错误消息:"调用了纯vitual函数"。

QThreadpool似乎调用了父类QRunnablepure virtual void run(),而不是派生类Bm中的void run()。奇怪的是,如果我尝试用b_1.run();手动调用函数,那么在运行时就没有问题。

这是我的课堂启示:

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

当线程对象超出main()函数范围时,甚至在QThreadPool调用IRunnable::run()之前,线程对象就会被删除。在返回之前使用QThreadPool::waitForDone()将确保线程被执行。