在运行期间,我收到错误消息:“pure vitual function called”。
QThreadpool似乎调用了父类pure virtual void run()
的{{1}},而不是派生类QRunnable
中的void run()
。
奇怪的是,如果我用Bm
手动调用该函数,则在运行时没有问题。
这是我的班级实施:
b_1.run();
这是我发生错误的主要功能。
class Bm : public QRunnable
{
public:
void run()
{
test();
}
private:
void test();
};
我的问题:为什么Qthreadpool在int main()
{
QThreadPool pool;
pool.setMaxThreadCount(1);
BM b_1;
pool.start(&b_1);
return 0;
}
上使用Bm::run()
?
答案 0 :(得分:1)
即使在main()
调用QThreadPool
之前,当离开IRunnable::run()
函数范围时,线程对象也会被删除。在返回之前使用QThreadPool::waitForDone()
将确保线程正在执行。