thread_supervisor
API demo
/**
@file
@author Alexander Sherikov
@copyright 2022 Alexander Sherikov. Licensed under the Apache License,
Version 2.0. (see LICENSE or http://www.apache.org/licenses/LICENSE-2.0)
@brief
*/
#define BOOST_TEST_MODULE thread_supervisor
#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp>
#include <boost/test/results_reporter.hpp>
#include <boost/timer/timer.hpp>
{
{
boost::unit_test::results_reporter::set_level(boost::unit_test::DETAILED_REPORT);
}
~GlobalFixtureConfig() = default;
};
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpedantic"
// Depending on Boost version a compiler may issue a warning about extra ';',
// at the same time, compilation may fail on some systems if ';' is omitted.
#pragma GCC diagnostic pop
namespace
{
class TestThreadSupervisor : public tut::thread::InheritableSupervisor<>
{
public:
std::atomic<std::size_t> counter_;
public:
// cppcheck-suppress virtualCallInConstructor
void stopSupervisedThreads() override
{
}
void threadFunction()
{
for (;;)
{
{
break;
}
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
void threadCounter()
{
++counter_;
}
TestThreadSupervisor()
{
counter_ = 0;
}
~TestThreadSupervisor()
{
}
};
} // namespace
BOOST_AUTO_TEST_CASE(ThreadSupervisorStop)
{
TestThreadSupervisor pool;
pool.addSupervisedThread(tut::thread::Parameters(), &TestThreadSupervisor::threadFunction, &pool);
pool.addSupervisedThread(tut::thread::Parameters(), &TestThreadSupervisor::threadFunction, &pool);
pool.addSupervisedThread(tut::thread::Parameters(), &TestThreadSupervisor::threadFunction, &pool);
}
BOOST_AUTO_TEST_CASE(ThreadSupervisorCount)
{
TestThreadSupervisor pool;
BOOST_CHECK_EQUAL(pool.counter_, static_cast<std::size_t>(0));
pool.addSupervisedThread(
tut::thread::Parameters::Restart(/*attempts=*/10, /*sleep_ms=*/5),
&TestThreadSupervisor::threadCounter,
&pool);
std::this_thread::sleep_for(std::chrono::seconds(1));
BOOST_CHECK_EQUAL(pool.counter_, static_cast<std::size_t>(10));
BOOST_CHECK(not pool.isThreadSupervisorInterrupted());
}
tut::thread::InheritableSupervisor::stopSupervisedThreads
virtual void stopSupervisedThreads()=0
tut::thread::InheritableSupervisor::getThreadSupervisor
const Supervisor< t_Logger > & getThreadSupervisor() const
Definition: supervisor.h:494
GlobalFixtureConfig::GlobalFixtureConfig
GlobalFixtureConfig()
Definition: supervisor.cpp:19
supervisor.h
tut::thread::Parameters::TerminationPolicy::IGNORE
@ IGNORE
tut::thread::InheritableSupervisor::isThreadSupervisorInterrupted
bool isThreadSupervisorInterrupted() const
Should be checked by threaded class methods.
Definition: supervisor.h:524
tut::thread::Parameters::Restart
Restarting parameters.
Definition: supervisor.h:73
tut::thread::InheritableSupervisor
Inheritable supervisor simplifies starting class methods in separate threads.
Definition: supervisor.h:487
GlobalFixtureConfig
Definition: supervisor.cpp:17
BOOST_AUTO_TEST_CASE
BOOST_AUTO_TEST_CASE(ThreadSupervisorStop)
Definition: supervisor.cpp:84
BOOST_GLOBAL_FIXTURE
BOOST_GLOBAL_FIXTURE(GlobalFixtureConfig)
tut::thread::Parameters
Thread parameters.
Definition: supervisor.h:54
GlobalFixtureConfig::~GlobalFixtureConfig
~GlobalFixtureConfig()=default