Во время выполнения я получаю сообщение об ошибке: «чистая витальная функция называется».QThreadPool называет чистую виртуальную функцию родительского класса QRunnable
QThreadPool, кажется, называют pure virtual void run()
родительского класса QRunnable
, а не от void run()
в производном классе Bm
. Как ни странно, если я вызову функцию вручную с помощью 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()
?
Попробуйте вызвать pool.waitForDone() перед возвратом из main(). Похоже, b_1 удаляется до начала потока ... – Archie
Спасибо. Это сработало. как я теперь это сделал? я удаляю вопрос, потому что ответ на мою проблему кажется тривиальным или должен быть опубликованный ответ? – FruitSokrat
Я думаю, что ваш вопрос совершенно верен и может помочь кому-то другому. – Archie