// 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 #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 { mThread.interrupt(); } virtual void Start() final { mThread = boost::scoped_thread<>([this] { (*this)(); }); } virtual void operator()() = 0; protected: boost::scoped_thread<> mThread {}; };