NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
cancellation_slot.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_ASYNC_CANCELLATION_SLOT_HPP__
2#define NEFORCE_CORE_ASYNC_CANCELLATION_SLOT_HPP__
3
12
17NEFORCE_BEGIN_NAMESPACE__
18
24
28}
29
39private:
40 stop_token token_;
41 shared_ptr<void> callback_;
42
43public:
45 using cancel_handler = function<void()>;
46
50 cancellation_slot() = default;
51
56 explicit cancellation_slot(stop_token token) :
57 token_(move(token)) {}
58
62 NEFORCE_NODISCARD bool is_cancelled() const noexcept { return token_.stop_requested(); }
63
72 template <typename Handler>
73 bool assign(Handler&& handler) {
74 if (is_cancelled()) {
75 forward<Handler>(handler)();
76 return false;
77 }
78 if (!token_.stop_possible()) {
79 return false;
80 }
81 callback_ = make_shared<stop_callback<Handler>>(token_, forward<Handler>(handler));
82 return true;
83 }
84
88 NEFORCE_NODISCARD const stop_token& get_token() const noexcept { return token_; }
89
93 NEFORCE_NODISCARD bool has_slot() const noexcept { return token_.stop_possible(); }
94};
95 // Cancellation
97
98NEFORCE_END_NAMESPACE__
99#endif // NEFORCE_CORE_ASYNC_CANCELLATION_SLOT_HPP__
const stop_token & get_token() const noexcept
获取关联的 stop_token
bool assign(Handler &&handler)
注册取消回调
cancellation_slot(stop_token token)
从 stop_token 构造
bool has_slot() const noexcept
检查是否有取消能力
cancellation_slot()=default
默认构造
bool is_cancelled() const noexcept
检查是否已请求取消
function< void()> cancel_handler
取消回调类型
函数包装器主模板声明
共享智能指针类模板
通用函数包装器
constexpr T && forward(remove_reference_t< T > &x) noexcept
完美转发左值
error_code make_operation_aborted() noexcept
操作已取消的错误码
static const error_category & system() noexcept
获取系统错误类别单例
@ operation_canceled
操作已取消
enable_if_t<!is_unbounded_array_v< T > &&is_constructible_v< T, Args... >, shared_ptr< T > > make_shared(Args &&... args)
融合分配创建共享指针
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
共享智能指针实现
停止令牌实现