После проблем возникших в этой статье, решил попробовать использовать QtConcurrent::run + QFuture + QFutureWatcher
Вполне возможно, что это я неудачник, или же это просто нехватка опыта использования QtConcurrent, но опять же результат разный на Windows и Linux (fedora)
Код:
Запуск потока:
auto watcher = new QFutureWatcher<ParserTask *>(this);
QObject::connect(watcher, SIGNAL(finished()), SLOT(taskFinished()));
//QObject::connect(watcher, SIGNAL(canceled()), SLOT(taskFinished()));
auto future = QtConcurrent::run(task, &ParserTask::run);
watcher->setFuture(future);
taskFinished слот:
void taskFinished() {
auto watcher = static_cast<QFutureWatcher<ParserTask *> *>(QObject::sender());
std::cout << "PARSED: " << watcher->result()->result().size();
}
Вывод на fedora без строчки «PARSER: *», на винде с этой строчкой
Что я не так делаю и как это исправить?