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