namespace std {
namespace experimental {
namespace net {
inline namespace v1 {
class io_context::executor_type
{
public:
// [io_context.exec.cons], construct / copy / destroy:
executor_type(const executor_type& other) noexcept;
executor_type(executor_type&& other) noexcept;
executor_type& operator=(const executor_type& other) noexcept;
executor_type& operator=(executor_type&& other) noexcept;
// [io_context.exec.ops], executor operations:
bool running_in_this_thread() const noexcept;
io_context& context() const noexcept;
void on_work_started() const noexcept;
void on_work_finished() const noexcept;
template<class Func, class ProtoAllocator>
void dispatch(Func&& f, const ProtoAllocator& a) const;
template<class Func, class ProtoAllocator>
void post(Func&& f, const ProtoAllocator& a) const;
template<class Func, class ProtoAllocator>
void defer(Func&& f, const ProtoAllocator& a) const;
};
bool operator==(const io_context::executor_type& a,
const io_context::executor_type& b) noexcept;
bool operator!=(const io_context::executor_type& a,
const io_context::executor_type& b) noexcept;
} // inline namespace v1
} // namespace net
} // namespace experimental
} // namespace std
io_context::executor_type is a type satisfying the Executor requirements ([async.reqmts.executor]). Objects of type io_context::executor_type are associated with an io_context, and function objects submitted using the dispatch, post, or defer member functions will be executed by the io_context from within a run function.]
executor_type(const executor_type& other) noexcept;
Postconditions: *this == other.
executor_type(executor_type&& other) noexcept;
Postconditions: *this is equal to the prior value of other.
executor_type& operator=(const executor_type& other) noexcept;
Postconditions: *this == other.
Returns: *this.
executor_type& operator=(executor_type&& other) noexcept;
Postconditions: *this is equal to the prior value of other.
Returns: *this.
bool running_in_this_thread() const noexcept;
Returns: true if the current thread of execution is calling a run function of the associated io_context object. [ Note: That is, the current thread of execution's call chain includes a run function. — end note ]
io_context& context() const noexcept;
Returns: A reference to the associated io_context object.
void on_work_started() const noexcept;
Effects: Increments the count of outstanding work associated with the io_context.
void on_work_finished() const noexcept;
Effects: Decrements the count of outstanding work associated with the io_context.
template<class Func, class ProtoAllocator>
void dispatch(Func&& f, const ProtoAllocator& a) const;
Effects: If running_in_this_thread() is true, calls DECAY_COPY(forward<Func>(f))() (C++ 2014 [thread.decaycopy]). [ Note: If f exits via an exception, the exception propagates to the caller of dispatch(). — end note ] Otherwise, calls post(forward<Func>(f), a).
template<class Func, class ProtoAllocator>
void post(Func&& f, const ProtoAllocator& a) const;
Effects: Adds f to the io_context.
template<class Func, class ProtoAllocator>
void defer(Func&& f, const ProtoAllocator& a) const;
Effects: Adds f to the io_context.
bool operator==(const io_context::executor_type& a,
const io_context::executor_type& b) noexcept;
Returns: addressof(a.context()) == addressof(b.context()).
bool operator!=(const io_context::executor_type& a,
const io_context::executor_type& b) noexcept;
Returns: !(a == b).