Как расширить функционал класса std::thread? windows, c++
Нужно при создании экземпляра класса передать функцию с параметрами конструктору родительского класса. мой код:
class Thread : public std::thread
{
private:
public:
std::atomic<bool> isDone = false;
Thread() = delete;
Thread(???) : std::thread(???)
{
this->detach();
};
~Thread();
};
И второй вопрос, как определить, что поток завершил работу и выставить true в std::atomic<bool>?
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Ну, самый первый вопрос вроде бы можно решить так:
class Thread: public thread
{
public:
template<class Fn, class... Args>
Thread(Fn&& Fx, Args&&... Ax):
thread(forward<Fn>(Fx), forward<Args>(Ax)...)
{
}
};
Для отслеживания... Как вариант на коленке: еще один поток следит за основным (через join()) и выставляет флаг, когда первый завершен. Что-то вроде
class Thread
{
public:
template<class Fn, class... Args>
Thread(Fn&& Fx, Args&&... Ax)
:run(forward<Fn>(Fx), forward<Args>(Ax)...)
,check([this](){ this->run.join(); this->isDone = true; })
{
}
~Thread(){ check.join(); }
private:
thread run, check;
public:
atomic<bool> isDone = false;
};