Program Listing for File JoiningThread.hpp

Return to documentation for file (include/depthai/utility/JoiningThread.hpp)

#pragma once

#include <thread>

namespace dai {

class JoiningThread : private std::thread {
   public:
    using std::thread::thread;
    JoiningThread() = default;
    // Create an empty copy constructor
    JoiningThread(const JoiningThread&) : JoiningThread() {}
    JoiningThread(JoiningThread&&) = default;
    JoiningThread& operator=(JoiningThread&& thr) {
        if(joinable()) {
            join();
        }
        swap(thr);
        return *this;
    };
    ~JoiningThread() {
        if(joinable()) {
            join();
        }
    }
    JoiningThread(std::thread t) : std::thread(std::move(t)) {}

    using std::thread::detach;
    using std::thread::get_id;
    using std::thread::hardware_concurrency;
    using std::thread::join;
    using std::thread::joinable;
    using std::thread::native_handle;

    void swap(JoiningThread& x) {
        std::thread::swap(x);
    }
};

inline void swap(JoiningThread& x, JoiningThread& y) {
    x.swap(y);
}

}  // namespace dai