参考上一篇后,这里也直接干货,主要protected里面的成员函数时为了便于做UT
JthreadSample.h
#ifndef JTHREAD_SAMPLE_
#define JTHREAD_SAMPLE_
#include <memory>
#include <thread>
class JthreadSample
{
public:
explicit JthreadSample();
virtual ~JthreadSample() override;
JthreadSample(const JthreadSample&) = delete;
JthreadSample(JthreadSample&&) = delete;
JthreadSample& operator=(const JthreadSample&) = delete;
JthreadSample& operator=(JthreadSample&&) = delete;
void dispatch() override;
protected:
virtual bool loopCondition(std::stop_token& stop_token);
virtual void notificationHandler(std::stop_token stop_token);
private:
void threadForNotificationHandler();
std::jthread notify_thread_;
};
#endif // JTHREAD_SAMPLE_
JthreadSample.cpp
#include "JthreadSample.h"
JthreadSample::JthreadSample()
{
}
JthreadSample::~JthreadSample()
{
}
void JthreadSample::dispatch()
{
threadForNotificationHandler();
}
void JthreadSample::notificationHandler(std::stop_token stop_token)
{
while (loopCondition(stop_token))
{
do_something(stop_token);
}
}
void JthreadSample::threadForNotificationHandler()
{
notify_thread_ = std::jthread([this](std::stop_token token)
{
this->notificationHandler(token);
});
}
bool JthreadSample::loopCondition(std::stop_token& stop_token)
{
return !stop_token.stop_requested();
}