Как расширить функционал класса 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;
};

См. https://ideone.com/PnWJGd

→ Ссылка