Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      Standard library header <stop_token> (C++20)

      From cppreference.com
      <cpp‎ |header
       
       
      Standard library headers
       

      This header is part of thethread support library.

      Contents

      Classes

      (C++20)
      an interface for querying if astd::jthread cancellation request has been made
      (class)[edit]
      class representing a request to stop one or morestd::jthreads
      (class)[edit]
      an interface for registering callbacks onstd::jthread cancellation
      (class template)[edit]
      provides a stop token interface that a stop is never possible nor requested
      (class)[edit]
      a stop token that references stop state of its associatedstd::inplace_stop_source object
      (class)[edit]
      astoppable-source that is the sole owner of the stop state
      (class)[edit]
      a stop callback forstd::inplace_stop_token
      (class template)[edit]

      Alias templates

      obtains the callback type for a given stop token type
      (alias template)[edit]

      Concepts

      specifies the basic interface of stop tokens which allows queries for stop requests and whether the stop request is possible
      (concept)[edit]
      specifies a stop token that does not allow stopping
      (concept)[edit]

      Tags

      a tag used forstop_source to indicate no associated stop-state upon construction
      (tag)[edit]

      [edit]Synopsis

      namespace std{// stop token conceptstemplate<class CallbackFn,class Token,class Init= CallbackFn>    concept/*stoppable-callback-for*/=/* see description */;// exposition only template<class Token>    concept stoppable_token=/* see description */; template<class Token>    concept unstoppable_token=/* see description */; template<class Source>    concept/*stoppable-source*/=/* see description */;// exposition only // class stop_tokenclass stop_token; // class stop_sourceclass stop_source; // no-shared-stop-state indicatorstruct nostopstate_t{explicit nostopstate_t()=default;};inlineconstexpr nostopstate_t nostopstate{}; // class template stop_callbacktemplate<class Callback>class stop_callback; // class never_stop_tokenclass never_stop_token; // class inplace_stop_tokenclass inplace_stop_token; // class inplace_stop_sourceclass inplace_stop_source; // class template inplace_stop_callbacktemplate<class CallbackFn>class inplace_stop_callback; template<class T,class CallbackFn>using stop_callback_for_t= T::template callback_type<CallbackFn>;}

      [edit]Stop token concepts

      namespace std{template<class CallbackFn,class Token,class Init= CallbackFn>    concept/*stoppable-callback-for*/=// exposition only      invocable<CallbackFn>&&      constructible_from<CallbackFn, Init>&&      requires{typename stop_callback_for_t<Token, CallbackFn>;}&&      constructible_from<stop_callback_for_t<Token, CallbackFn>,const Token&, Init>; template<template<class>class>struct/*check-type-alias-exists*/;// exposition only template<class Token>    concept stoppable_token=       requires(const Token tok){typename/*check-type-alias-exists*/<Token::template callback_type>;{ tok.stop_requested()}noexcept-> same_as<bool>;{ tok.stop_possible()}noexcept-> same_as<bool>;{ Token(tok)}noexcept;// see implicit expression variations}&&      copyable<Token>&&      equality_comparable<Token>; template<class Token>    concept unstoppable_token=       stoppable_token<Token>&&      requires(const Token tok){        requires bool_constant<(!tok.stop_possible())>::value;}; template<class Source>    concept/*stoppable-source*/=// exposition only      requires(Source& src,const Source csrc){{ csrc.get_token()}-> stoppable_token;{ csrc.stop_possible()}noexcept-> same_as<bool>;{ csrc.stop_requested()}noexcept-> same_as<bool>;{ src.request_stop()}-> same_as<bool>;};}

      [edit]Classstd::stop_token

      namespace std{class stop_token{public:template<class CallbackFn>using callback_type= stop_callback<CallbackFn>; // constructors, copy, and assignment    stop_token()noexcept=default; // member functionsvoid swap(stop_token&)noexcept; // stop handlingbool stop_requested()constnoexcept;bool stop_possible()constnoexcept; friendbool operator==(const stop_token& lhs,const stop_token& rhs)noexcept;friendvoid swap(stop_token& lhs, stop_token& rhs)noexcept; private:    shared_ptr</*unspecified*/> stop_state_;// exposition only};}

      [edit]Classstd::stop_source

      namespace std{class stop_source{public:// constructors, copy, and assignment    stop_source();explicit stop_source(nostopstate_t)noexcept{} // member functionsvoid swap(stop_source&)noexcept; // stop handling    stop_token get_token()constnoexcept;bool stop_possible()constnoexcept;bool stop_requested()constnoexcept;bool request_stop()noexcept; friendbool    operator==(const stop_source& lhs,const stop_source& rhs)noexcept;friendvoid swap(stop_source& lhs, stop_source& rhs)noexcept; private:    shared_ptr</*unspecified*/> stop_state_;// exposition only};}

      [edit]Class templatestd::stop_callback

      namespace std{template<class CallbackFn>class stop_callback{public:using callback_type= CallbackFn; // constructors and destructortemplate<class Init>explicit stop_callback(const stop_token& st, Init&& init)noexcept(is_nothrow_constructible_v<CallbackFn, Init>);template<class Init>explicit stop_callback(stop_token&& st, Init&& init)noexcept(is_nothrow_constructible_v<CallbackFn, Init>);    ~stop_callback();     stop_callback(const stop_callback&)= delete;    stop_callback(stop_callback&&)= delete;    stop_callback& operator=(const stop_callback&)= delete;    stop_callback& operator=(stop_callback&&)= delete; private:    CallbackFn callback_fn_;// exposition only}; template<class CallbackFn>  stop_callback(stop_token, CallbackFn)-> stop_callback<CallbackFn>;}

      [edit]Class templatestd::never_stop_token

      namespace std{class never_stop_token{struct/*callback-type*/{// exposition onlyexplicit/*callback-type*/(never_stop_token,auto&&)noexcept{}}; public:template<class>using callback_type=/*callback-type*/; staticconstexprbool stop_requested()noexcept{returnfalse;}staticconstexprbool stop_posible()noexcept{returnfalse;} bool operator==(const never_stop_token&)const=default;};}

      [edit]Class templatestd::inplace_stop_token

      namespace std{class inplace_stop_token{public:template<class CallbackFn>using callback_type= inplace_stop_callback<CallbackFn>;     inplace_stop_token()=default;bool operator==(const inplace_stop_token&)const=default; // member functionsbool stop_requested()constnoexcept;bool stop_possible()constnoexcept;void swap(inplace_stop_token&)noexcept; private:const inplace_stop_source* stop_source_= nullptr;// exposition only};}

      [edit]Class templatestd::inplace_stop_source

      namespace std{class inplace_stop_source{// constructors, assignments, and destructorconstexpr inplace_stop_source()noexcept;     inplace_stop_source(inplace_stop_source&&)= delete;    inplace_stop_source(const inplace_stop_source&)= delete;    inplace_stop_source& operator=(inplace_stop_source&&)= delete;    inplace_stop_source& operator=(const inplace_stop_source&)= delete;    ~inplace_stop_source(); // stop handlingconstexpr inplace_stop_token get_token()constnoexcept;staticconstexprbool stop_possible()noexcept{returntrue;}bool stop_requested()constnoexcept;bool request_stop()noexcept;};}

      [edit]Class templatestd::inplace_stop_callback

      namespace std{template<class CallbackFn>class inplace_stop_callback{public:using callback_type= CallbackFn; // constructors and destructortemplate<class Init>explicit inplace_stop_callback(inplace_stop_token st, Init&& init)noexcept(is_nothrow_constructible_v<CallbackFn, Init>);    ~inplace_stop_callback();     inplace_stop_callback(const inplace_stop_callback&)= delete;    inplace_stop_callback(inplace_stop_callback&&)= delete;    inplace_stop_callback& operator=(const inplace_stop_callback&)= delete;    inplace_stop_callback& operator=(inplace_stop_callback&&)= delete; private:    CallbackFn callback_fn_;// exposition only}; template<class CallbackFn>  inplace_stop_callback(inplace_stop_token, CallbackFn)-> inplace_stop_callback<CallbackFn>;}
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/header/stop_token&oldid=177423"

      [8]ページ先頭

      ©2009-2025 Movatter.jp