Клепаю класс на основе потока (с возвращением результата произвольного типа обратно в основной поток).
Судя по всему - код из run() срабатывает в потоке GUI, а не отдельном.
Что делается неверно?
#ifndef ASYNC_H
#define ASYNC_H
#include <QThread>
#include <functional>
/**
* Async callback class
*/
template<typename T> class Async : public QThread
{
public:
Async(std::function<T()> worker, std::function<void(T)> callback);
private:
T result;
std::function<T()> func;
std::function<void(T)> returner;
protected:
void run();
private:
void onfinished();
};
/**
* Run async call
* @param worker Function, that will work in other thread and return some result
* @param callback callback function
*/
template<typename T> Async<T>::Async(std::function<T()> worker, std::function<void(T)> callback) : QThread()
{
func = worker;
returner = callback;
connect(this, SIGNAL(finished()), this, SLOT(onfinished()));
start();
}
template<typename T> void Async<T>::run()
{
result = func();
}
template<typename T> void Async<T>::onfinished()
{
returner(result);
}
#endif // ASYNC_H
UPD. И тут я понял, что код - полный бред и нуждается в отправке в мусорку :-)