C++11的异步调用

来源:互联网 发布:如何开手机淘宝 编辑:程序博客网 时间:2024/05/21 08:46


用C++11的线程库完成异步调用非常方便,标准库提供了非常漂亮的接口。下面就是个很好的例子.

template<typename>struct async_call;template<typename R, typename... Args>struct async_call<R(Args...)>{template<typename F>async_call(F&& f, Args... args){std::packaged_task<R(Args...)> task(f);m_future=task.get_future();std::thread(std::move(task), args...).detach();}R get(){return m_future.get();}private:std::future<R> m_future;};

这个模版类简单地包装了一下标准库,这样调用:

int a=10, b=20;//需要异步执行的代码和参数async_call<int(int)> ac([](int x){ return x*x; }, a);//串行执行的代码b*=b;//合并计算结果,并输出cout<<ac.get()+b<<endl;

这样基本不用关心线程编程的细节,编程感受也和脚本类似了,哈哈。



0 0