C++11 packaged

编程入门 行业动态 更新时间:2024-10-24 14:21:43

C++11 <a href=https://www.elefans.com/category/jswz/34/1365871.html style=packaged"/>

C++11 packaged

std::packaged_task 把一个方法打包成一个task扔到线程中执行,然后通过packaged_task中的furture等待执行结果。

void test_promise()
{std::packaged_task <int()> task([]()->int {std::cout << "packaged_task begin \n" << std::endl;std::this_thread::sleep_for(std::chrono::seconds(3));std::cout << "packaged_task end \n" << std::endl; return 0; });std::future<int> fret = task.get_future();std::thread t3(std::move(task));int ret = fret.get();std::cout << "packaged_task ret:" << ret  << std::endl;t3.join();
}template<typename F, typename ... Types>
void test_forword(F f, Types ... args)
{auto func = std::bind(std::forward<F>(f), std::forward<Types>(args)...);//func(); return;using ret_type = typename std::result_of<F(Types...)>::type;std::packaged_task <ret_type()> task(func);std::future<ret_type> fret = task.get_future();std::thread t4(std::move(task));int ret = fret.get();std::cout << "forword bind task ret:" << ret << std::endl;t4.join();
}int forword_task(int a, int b)
{std::cout << "forword_task a:" << a << std::endl;std::cout << "forword_task b:" << b << std::endl;return a + b;
}class Forward
{
public:int forword_task(int a, int b){std::cout << "forword_task a:" << a << std::endl;std::cout << "forword_task b:" << b << std::endl;return a + b;}
};int main()
{test_forword(forword_task, 10, 20);Forward fw;test_forword(&Forward::forword_task, &fw, 30, 40);return 0;test_promise();return 0;
}

更多推荐

C++11 packaged

本文发布于:2023-12-07 01:06:47,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1669597.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:packaged

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!