1 #ifndef QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_THREAD_IMPL_H_
2 #define QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_THREAD_IMPL_H_
3 
4 #include <optional>
5 #include <string>
6 #include <thread>  // NOLINT: only used outside of google3
7 
8 #include "quiche/common/platform/api/quiche_export.h"
9 
10 class QUICHE_NO_EXPORT QuicheThreadImpl {
11  public:
QuicheThreadImpl(const std::string &)12   QuicheThreadImpl(const std::string&) {}
~QuicheThreadImpl()13   virtual ~QuicheThreadImpl() {}
14 
15   virtual void Run() = 0;
16 
Start()17   void Start() {
18     thread_.emplace([this]() { Run(); });
19   }
Join()20   void Join() { thread_->join(); }
21 
22  private:
23   std::optional<std::thread> thread_;
24 };
25 
26 #endif  // QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_THREAD_IMPL_H_
27