12#include DIUS_PLATFORM_PATH(thread.h)
30 : m_platform_thread(di::move(platform_thread)) {}
40 return do_start(di::move(erased_function));
46 Thread(Thread&& other) : m_platform_thread(
di::move(other.m_platform_thread)) {}
53 m_platform_thread = di::move(other.m_platform_thread);
58 [[nodiscard]]
auto get_id() const ->
Id {
return m_platform_thread ? m_platform_thread->id() :
Id(); }
66 if (!m_platform_thread) {
70 m_platform_thread.reset();
72 return m_platform_thread->join();
77 di::swap(a.m_platform_thread, b.m_platform_thread);
#define ASSERT
Definition assert_bool.h:16
Definition function.h:365
Definition scope_exit.h:12
Definition unexpected.h:14
di::TimePoint< SteadyClock > TimePoint
Definition steady_clock.h:13
Thread(Thread const &)=delete
auto joinable() const -> bool
Definition thread.h:57
di::ThreadId Id
Definition thread.h:33
~Thread()
Definition thread.h:48
auto operator=(Thread const &) -> Thread &=delete
friend void tag_invoke(di::Tag< di::swap >, Thread &a, Thread &b)
Definition thread.h:76
Thread(Thread &&other)
Definition thread.h:46
auto operator=(Thread &&other) -> Thread &
Definition thread.h:51
auto get_id() const -> Id
Definition thread.h:58
static auto create(F &&function, Args &&... args) -> di::Result< Thread >
Definition thread.h:37
auto join() -> di::Result< void >
Wait for the spawned thread's execution to terminate.
Definition thread.h:65
Duration< i64, math::Nano > Nanoseconds
Definition duration_literals.h:7
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
Expected< T, Error > Result
Definition result.h:8
Definition zstring_parser.h:9
constexpr auto bind_front(F &&f, Args &&... args)
Definition bind_front.h:68
constexpr auto make_function
Definition function.h:681
constexpr struct di::util::SwapFunction swap
void sleep_for(di::Nanoseconds duration)
Definition thread.cpp:10
void sleep_until(SteadyClock::TimePoint time_point)
Definition thread.cpp:17
Definition directory_entry.h:11