// BeamMP, the BeamNG.drive multiplayer mod. // Copyright (C) 2024 BeamMP Ltd., BeamMP team and contributors. // // BeamMP Ltd. can be contacted by electronic mail via contact@beammp.com. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published // by the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . #pragma once #include // pure virtual class to be inherited from by classes which intend to be threaded class IThreaded { public: IThreaded() // invokes operator() on this object : mThread() { } virtual ~IThreaded() noexcept { if (mThread.joinable()) { mThread.join(); } } virtual void Start() final { mThread = std::thread([this] { (*this)(); }); } virtual void operator()() = 0; protected: std::thread mThread; };