QThreadPool 调用父classQRunnable 的纯虚函数
QThreadPool calls pure virtual function of parent class QRunnable
在运行期间,我收到错误消息:"pure vitual function called"。
QThreadpool 似乎调用父 class QRunnable
的 pure virtual void run()
,而不是在派生 class Bm
中关闭 void run()
。
奇怪的是,如果我尝试使用 b_1.run();
手动调用该函数,则在运行时没有问题。
这是我的 class 实现:
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()
?
即使在 QThreadPool
调用 IRunnable::run()
之前,线程对象也会在超出 main()
函数作用域时被删除。在返回前使用 QThreadPool::waitForDone()
将确保线程正在执行。
在运行期间,我收到错误消息:"pure vitual function called"。
QThreadpool 似乎调用父 class QRunnable
的 pure virtual void run()
,而不是在派生 class Bm
中关闭 void run()
。
奇怪的是,如果我尝试使用 b_1.run();
手动调用该函数,则在运行时没有问题。
这是我的 class 实现:
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()
?
即使在 QThreadPool
调用 IRunnable::run()
之前,线程对象也会在超出 main()
函数作用域时被删除。在返回前使用 QThreadPool::waitForDone()
将确保线程正在执行。