32 Thread support library [thread] (original) (raw)

32.3 Stop tokens [thread.stoptoken]

32.3.3 Class stop_­token [stoptoken]

32.3.3.1 General [stoptoken.general]

The class stop_­token provides an interface for querying whether a stop request has been made (stop_­requested) or can ever be made (stop_­possible) using an associated stop_­source object ([stopsource]).

A stop_­token can also be passed to astop_­callback ([stopcallback]) constructor to register a callback to be called when a stop request has been made from an associated stop_­source.

namespace std { class stop_token { public: stop_token() noexcept; stop_token(const stop_token&) noexcept; stop_token(stop_token&&) noexcept; stop_token& operator=(const stop_token&) noexcept; stop_token& operator=(stop_token&&) noexcept;~stop_token();void swap(stop_token&) noexcept;[[nodiscard]] bool stop_requested() const noexcept;[[nodiscard]] bool stop_possible() const noexcept;[[nodiscard]] friend bool operator==(const stop_token& lhs, const stop_token& rhs) noexcept;friend void swap(stop_token& lhs, stop_token& rhs) noexcept;};}

32.3.3.2 Constructors, copy, and assignment [stoptoken.cons]

Postconditions: stop_­possible() is false andstop_­requested() is false.

[Note 1:

Because the created stop_­token object can never receive a stop request, no resources are allocated for a stop state.

— _end note_]

stop_token(const stop_token& rhs) noexcept;

Postconditions: *this == rhs is true.

[Note 2:

*this and rhs share the ownership of the same stop state, if any.

— _end note_]

stop_token(stop_token&& rhs) noexcept;

Postconditions: *this contains the value of rhsprior to the start of construction and rhs.stop_­possible() is false.

Effects: Releases ownership of the stop state, if any.

stop_token& operator=(const stop_token& rhs) noexcept;

Effects: Equivalent to: stop_­token(rhs).swap(*this).

stop_token& operator=(stop_token&& rhs) noexcept;

Effects: Equivalent to: stop_­token(std​::​move(rhs)).swap(*this).

void swap(stop_token& rhs) noexcept;

Effects: Exchanges the values of *this and rhs.

32.3.3.3 Members [stoptoken.mem]

[[nodiscard]] bool stop_requested() const noexcept;

Returns: true if *this has ownership of a stop state that has received a stop request; otherwise, false.

[[nodiscard]] bool stop_possible() const noexcept;

Returns: false if:

otherwise, true.

32.3.3.4 Non-member functions [stoptoken.nonmembers]

[[nodiscard]] bool operator==(const stop_token& lhs, const stop_token& rhs) noexcept;

Returns: true if lhs and rhs have ownership of the same stop state or if both lhs and rhs do not have ownership of a stop state; otherwise false.

friend void swap(stop_token& x, stop_token& y) noexcept;

Effects: Equivalent to: x.swap(y).