Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Future

Boost , Chapter 1. Fiber , Futures

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Будущее предоставляет механизм доступа к результату асинхронной операции.

shared state

<promise<>>и его [ее] части.<future<>>находится неопределённый объект, называемый ихОбщее состояние. Общее состояние — это то, что на самом деле будет поддерживать результат асинхронизации (или исключение).

При этом, как и в случае с<promise<>>.

Помимо своего происхождения<promise<>>,<future<>>содержит уникальную ссылку на конкретное общее состояние. Однако несколько<shared_future<>>экземпляров могут ссылаться на одно и то же базовое общее состояние.

Поскольку<packaged_task<>>и<fibers::async()>реализуются с использованием<promise<>>, к ним также относятся обсуждения общего состояния.

Enumeration future_status

Время ожидания операций<future::wait_for()>и<future::wait_until()>возвращает состояние будущего.

enum class future_status {
    ready,
    timeout,
    deferred  // not supported yet
};
ready

Effects:

Общий штатготов.

timeout

Effects:

общее состояниене стало готовым до истечения тайм-аута.

[Note]Note

Отложенное будущее не поддерживается.

Template future<>

<future<>>содержитобщее состояние, которое не разделяется ни с каким другим будущим.

#include <boost/fiber/future/future.hpp>
namespace boost {
namespace fibers {
template< typename R >
class future {
public:
    future() noexcept;
    future( future const& other) = delete;
    future & operator=( future const& other) = delete;
    future( future && other) noexcept;
    future & operator=( future && other) noexcept;
    ~future();
    bool valid() const noexcept;
    shared_future< R > share();
    R get();    // member only of generic future template
    R & get();  // member only of future< R & > template specialization
    void get(); // member only of future< void > template specialization
    std::exception_ptr get_exception_ptr();
    void wait() const;
    template< class Rep, class Period >
    future_status wait_for(
        std::chrono::duration< Rep, Period > const& timeout_duration) const;
    template< typename Clock, typename Duration >
    future_status wait_until(
        std::chrono::time_point< Clock, Duration > const& timeout_time) const;
};
}}
Default constructor
future() noexcept;

Effects:

Создает будущее без общего состояния. После строительства<false==valid()>.

Throws:

Ничего.

Move constructor
future( future && other) noexcept;

Effects:

Построение будущего с общим состояниемдругих. После строительства<false ==other.valid()>.

Throws:

Ничего.

Destructor
~future();

Effects:

Уничтожает будущее, отказывается от собственности.

Note:

<~future()>неблокирует вызывающее волокно.

Рассмотрим последовательность, такую как:

  1. [ORIG_END] -->
  2. [ORIG_END] -->
  3. [ORIG_END] -->
  4. [ORIG_END] -->
  5. [ORIG_END] -->

Окончательный звонок<set_value()>удался, но значение тихо отбрасывается: из этого<promise<>>не может быть получено никакого дополнительного<future<>>.

Member function operator=()

future & operator=( future && other) noexcept;

Effects:

,из других<this>. После этого<false== other.valid()>.

Throws:

Ничего.

Member function valid()

bool valid() const noexcept;

Effects:

Возвращается<true>, если будущее содержитобщее состояние.

Throws:

Ничего.

Member function share()

shared_future< R > share();

Effects:

Переместите государство в<shared_future<>>.

Returns:

<shared_future<>>, содержащееобщее состояние, ранее принадлежавшее<*this>.

Postcondition:

Throws:

<future_error>с ошибкой<future_errc::no_state>.

Member function get()

R get();    // member only of generic future template
R & get();  // member only of future< R & > template specialization
void get(); // member only of future< void > template specialization

Precondition:

<true== valid()>

Returns:

<promise::set_value()>или<promise::set_exception()>называется. Если<promise::set_value()>называется, то возвращает значение. Если<promise::set_exception()>называется, то бросает указанное исключение.

Postcondition:

Throws:

<future_error>с ошибкой<future_errc::no_state>,<future_errc::broken_promise>. Исключение составляет<promise::set_exception()>.

Member function get_exception_ptr()

std::exception_ptr get_exception_ptr();

Precondition:

<true== valid()>

Returns:

<promise::set_value()>или<promise::set_exception()>. Если<set_value()>называется, то возвращается построенный по умолчанию<std::exception_ptr>. Если<set_exception()>называется, то возвращается<std::exception_ptr>.

Throws:

<future_error>с ошибкой<future_errc::no_state>.

Note:

<get_exception_ptr()>неделает<future>недействительным. После звонка<get_exception_ptr()>вы можете позвонить<future::get()>.

Member function wait()

void wait();

Effects:

<promise::set_value()>или<promise::set_exception()>.

Throws:

<future_error>с ошибкой<future_errc::no_state>.

Templated member function wait_for()

template< class Rep, class Period >
future_status wait_for( std::chrono::duration< Rep, Period > const& timeout_duration) const;

Effects:

<promise::set_value()>или<promise::set_exception()>, или<timeout_duration>уже прошло.

Result:

А<future_status>возвращается с указанием причины возвращения.

Throws:

<future_error>с условием ошибки<future_errc::no_state>или исключениями, связанными с тайм-аутом.

Templated member function wait_until()

template< typename Clock, typename Duration >
future_status wait_until( std::chrono::time_point< Clock, Duration > const& timeout_time) const;

Effects:

<promise::set_value()>или<promise::set_exception()>, или<timeout_time>уже прошло.

Result:

А<future_status>возвращается с указанием причины возвращения.

Throws:

<future_error>с условием ошибки<future_errc::no_state>или исключениями, связанными с тайм-аутом.

Template shared_future<>

<shared_future<>>содержитобщее состояние, которое может быть разделено с другими<shared_future<>>экземплярами.

#include <boost/fiber/future/future.hpp>
namespace boost {
namespace fibers {
template< typename R >
class shared_future {
public:
    shared_future() noexcept;
    ~shared_future();
    shared_future( shared_future const& other);
    shared_future( future< R > && other) noexcept;
    shared_future( shared_future && other) noexcept;
    shared_future & operator=( shared_future && other) noexcept;
    shared_future & operator=( future< R > && other) noexcept;
    shared_future & operator=( shared_future const& other) noexcept;
    bool valid() const noexcept;
    R const& get(); // member only of generic shared_future template
    R & get();      // member only of shared_future< R & > template specialization
    void get();     // member only of shared_future< void > template specialization
    std::exception_ptr get_exception_ptr();
    void wait() const;
    template< class Rep, class Period >
    future_status wait_for(
        std::chrono::duration< Rep, Period > const& timeout_duration) const;
    template< typename Clock, typename Duration >
    future_status wait_until(
        std::chrono::time_point< Clock, Duration > const& timeout_time) const;
};
}}
Default constructor
shared_future();

Effects:

Создает общее будущее без общего состояния. После строительства<false ==valid()>.

Throws:

Ничего.

Move constructor
shared_future( future< R > && other) noexcept;
shared_future( shared_future && other) noexcept;

Effects:

Построение общего будущего собщим состояниемдругого. После строительства<false ==other.valid()>.

Throws:

Ничего.

Copy constructor
shared_future( shared_future const& other) noexcept;

Effects:

Построение общего будущего собщим состояниемдругого. После строительства<other.valid()>остается без изменений.

Throws:

Ничего.

Destructor
~shared_future();

Effects:

Уничтожает совместное будущее; право собственности прекращается, если оно не распространяется.

Note:

<~shared_future()>неблокирует вызывающее волокно.

Member function operator=()

shared_future & operator=( future< R > && other) noexcept;
shared_future & operator=( shared_future && other) noexcept;
shared_future & operator=( shared_future const& other) noexcept;

Effects:

Перемещает или копируетобщее состояниедругого в<this>. После назначения состояние<other.valid()>зависит от того, какая перегрузка была вызвана: без изменений для перегрузки, принимающей<shared_future const&>, в противном случае<false>.

Throws:

Ничего.

Member function valid()

bool valid() const noexcept;

Effects:

Возвращается<true>, если общее_будущее содержитобщее состояние.

Throws:

Ничего.

Member function get()

R const& get(); // member only of generic shared_future template
R & get();      // member only of shared_future< R & > template specialization
void get();     // member only of shared_future< void > template specialization

Precondition:

<true== valid()>

Returns:

<promise::set_value()>или<promise::set_exception()>называется. Если<promise::set_value()>называется, то возвращает значение. Если<promise::set_exception()>называется, то бросает указанное исключение.

Postcondition:

Throws:

<future_error>с ошибкой<future_errc::no_state>,<future_errc::broken_promise>. Исключение составляет<promise::set_exception()>.

Member function get_exception_ptr()

std::exception_ptr get_exception_ptr();

Precondition:

<true== valid()>

Returns:

<promise::set_value()>или<promise::set_exception()>. Если<set_value()>называется, то возвращается построенный по умолчанию<std::exception_ptr>. Если<set_exception()>называется, то возвращается<std::exception_ptr>.

Throws:

<future_error>с ошибкой<future_errc::no_state>.

Note:

<get_exception_ptr()>делаетненедействительным<shared_future>. После звонка<get_exception_ptr()>вы можете позвонить<shared_future::get()>.

Member function wait()

void wait();

Effects:

<promise::set_value()>или<promise::set_exception()>.

Throws:

<future_error>с ошибкой<future_errc::no_state>.

Templated member function wait_for()

template< class Rep, class Period >
future_status wait_for( std::chrono::duration< Rep, Period > const& timeout_duration) const;

Effects:

<promise::set_value()>или<promise::set_exception()>, или<timeout_duration>уже прошло.

Result:

А<future_status>возвращается с указанием причины возвращения.

Throws:

<future_error>с условием ошибки<future_errc::no_state>или исключениями, связанными с тайм-аутом.

Templated member function wait_until()

template< typename Clock, typename Duration >
future_status wait_until( std::chrono::time_point< Clock, Duration > const& timeout_time) const;

Effects:

<promise::set_value()>или<promise::set_exception()>, или<timeout_time>уже прошло.

Result:

А<future_status>возвращается с указанием причины возвращения.

Throws:

<future_error>с условием ошибки<future_errc::no_state>или исключениями, связанными с тайм-аутом.

Non-member function fibers::async()

#include <boost/fiber/future/async.hpp>
namespace boost {
namespace fibers {
template< class Function, class ... Args >
future<
    std::result_of_t<
        std::decay_t< Function >( std::decay_t< Args > ... )
    >
>
async( Function && fn, Args && ... args);
template< class Function, class ... Args >
future<
    std::result_of_t<
        std::decay_t< Function >( std::decay_t< Args > ... )
    >
>
async( launch policy, Function && fn, Args && ... args);
template< typename StackAllocator, class Function, class ... Args >
future<
    std::result_of_t<
        std::decay_t< Function >( std::decay_t< Args > ... )
    >
>
async( launch policy, std::allocator_arg_t, StackAllocator salloc,
       Function && fn, Args && ... args);
}}

Effects:

<fn<fiber>и возвращает<future<>>.

Result:

future<
    std::result_of_t<
        std::decay_t< Function >( std::decay_t< Args > ... )
    >
>

общее состояние, связанное с асинхронным выполнением<fn>.

Throws:

<fiber_error>или<future_error>при возникновении ошибки.

Notes:

Перегрузки, принимающие<std::allocator_arg_t>, используют пройденное<StackAllocator>при строительстве запущенного<fiber>. Перегрузки, принимающие<launch>, используют пройденное<launch>при строительстве запущенного<fiber>. По умолчанию<launch><post>, как для<fiber>конструктора.

[Note]Note

Отложенное будущее не поддерживается.


PrevUpHomeNext

Статья Future раздела Chapter 1. Fiber Futures может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Futures ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 22:26:35/0.032668113708496/1