在运行期间,我收到错误消息:“调用了纯虚拟函数”。
QThreadpool似乎调用父类pure virtual void run()
的QRunnable
,而不是派生类void run()
中的Bm
。
奇怪的是,如果我想用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()
将确保正在执行线程。