class fiber;
This class is a move-only handle representing a spawned fiber. fiber objects
may also be in a state that doesn’t represent any fiber (default constructor,
after move-from, detach(), or join()).
|
Warning
|
If the object represents a valid fiber, you MUST either call
join(this_fiber) or detach() before the destructor is run.
|
|
Important
|
fiber is a typedef for
basic_fiber<boost::asio::io_context::strand>. Strand below will refer to the
template argument of the instantiation used.
|
Member-functions
Constructor
basic_fiber(); // (1)
template<class F, class StackAllocator = boost::context::default_stack>
basic_fiber(Strand executor, F&& f,
StackAllocator salloc = StackAllocator()); // (2)
template<class F, class StackAllocator = boost::context::default_stack>
basic_fiber(decltype(std::declval<Strand>().context())& ctx, F&& f,
StackAllocator salloc = StackAllocator()); // (3)
template<class F, class StackAllocator = boost::context::default_stack>
basic_fiber(basic_fiber::this_fiber this_fiber, F&& f,
StackAllocator salloc = StackAllocator()); // (4)
-
Default constructor. Creates an object which doesn’t represent any fiber.
-
Spawn a fiber scheduled through
executor. -
Spawn a fiber scheduled through
Strand{ctx}. -
Spawn a fiber scheduled through
this_fiber.get_executor().
joinable()
bool joinable() const;
Checks if the fiber object identifies an active fiber of execution.
join()
void join(this_fiber this_fiber);
template<class Strand2>
void join(typename basic_fiber<Strand2>::this_fiber this_fiber);
Suspend current fiber (i.e. this_fiber) until the fiber identified by *this
finishes its execution.
Concurrently calling join() on the same fiber object from multiple fibers
results in undefined behavior.
joinable() is true.
joinable() is false.
fiber_interrupted if this_fiber is interrupted.
|
Note
|
If joining process is interrupted the handle remains joinable so you may
perform the join() operation again (or perform other operations like
interrupt() and detach()).
|
detach()
void detach();
Separates the fiber of execution from the fiber object, allowing execution to continue independently. Any allocated resources will be freed once the fiber exits.
joinable() is true.
joinable() is false.
interruption_caught()
bool interruption_caught() const;
Check whether the fiber finished by normal means or by letting the
fiber_interrupted exception escape its execution stack.
See interruption(7) for more.
Fiber has been successfully joined.
Nested types
this_fiber
See this_fiber(3).
Free functions
context_aborted()
bool context_aborted(boost::asio::io_context& ctx);
Check whether the context finished normally or abnormally. The context will be
terminated when you fail to join() or detach() a joinable fiber (abnormal
termination).
The context is terminated through the usual call to ctx.stop() in case you’re
concerned. In addition, a std::logic_error may also be raised.