NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
async.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_ASYNC_ASYNC_HPP__
2#define NEFORCE_CORE_ASYNC_ASYNC_HPP__
3
11
14NEFORCE_BEGIN_NAMESPACE__
15
21
27
42template <typename Func, typename... Args>
43NEFORCE_NODISCARD future<async_result_t<Func, Args...>> async(launch policy, Func&& function, Args&&... args) {
44 using Wrapper = call_wrapper<Func, Args...>;
45 using AsyncState = inner::__future_base::async_state_impl<Wrapper, async_result_t<Func, Args...>>;
46 using DeferredState = inner::__future_base::deferred_state<Wrapper, async_result_t<Func, Args...>>;
47
49 if ((policy & launch::async) == launch::async) {
50 state = _NEFORCE make_shared<AsyncState>(_NEFORCE forward<Func>(function), _NEFORCE forward<Args>(args)...);
51 }
52 if (!state) {
53 state = _NEFORCE make_shared<DeferredState>(_NEFORCE forward<Func>(function), _NEFORCE forward<Args>(args)...);
54 }
55 return _NEFORCE future<async_result_t<Func, Args...>>(_NEFORCE move(state));
56}
57
69template <typename Func, typename... Args>
70NEFORCE_NODISCARD future<async_result_t<Func, Args...>> async(Func&& function, Args&&... args) {
71 return _NEFORCE async(launch::async | launch::deferred, _NEFORCE forward<Func>(function),
72 _NEFORCE forward<Args>(args)...);
73}
74 // Async
76 // AsyncComponents
78
79NEFORCE_END_NAMESPACE__
80#endif // NEFORCE_CORE_ASYNC_ASYNC_HPP__
延迟调用包装
函数包装器主模板声明
独占future类模板
共享智能指针类模板
NEFORCE_NODISCARD constexpr T && forward(remove_reference_t< T > &x) noexcept
完美转发左值
invoke_result_t< decay_t< Func >, decay_t< Args >... > async_result_t
异步调用结果类型推导
launch
异步启动策略枚举
NEFORCE_NODISCARD future< async_result_t< Func, Args... > > async(launch policy, Func &&function, Args &&... args)
异步执行函数(指定策略)
@ async
异步执行,在新线程中运行
@ deferred
延迟执行,在获取结果时运行
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)))
移动范围元素
NeForce 异步任务包装器
延迟调用包装器