C++多线程---packaged_task
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++多线程---packaged_task,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2199字,纯文字阅读大概需要4分钟。
内容图文
![C++多线程---packaged_task](/upload/InfoBanner/zyjiaocheng/623/f3dd577de8804412a7369e4631f4b447.jpg)
#include<string>
#include<thread>
#include<mutex>
#include<fstream>
#include<future>
#include<deque>
#include<mutex> int faactorial(int N) {
?int res = -1;
?for (int i = N; i > 1; i--) {
??res += i;
?}
?std::cout << "result is" << res << std::endl;
?return res;
} std::deque<std::packaged_task<int()>> task_q;
std::mutex mu;
std::condition_variable cond; void thread_1()
{
?std::packaged_task<int()> t;
?{
??std::unique_lock<std::mutex> locker(mu);
??cond.wait(locker, [] {return !task_q.empty(); });
??t = std::move(task_q.front());//将主线程中获取到的t move出来并调用它
?}
?
?t();//调用并执行t
?//std::cout << "t()" << t() << std::endl; ? } ? int main() { ?//使用线程
?std::thread t1(thread_1);
?//使用package 可以异步获取结果
?std::packaged_task<int()> t(std::bind(faactorial,6));
?std::future<int> ret = t.get_future();//获得与packaged_task共享状态相关联的future对象 ?{
??std::unique_lock<std::mutex> locker(mu);
??task_q.push_back(std::move(t));//主线程创建一个packaged_task对象并将其push到队列中
?
?}
?cond.notify_one();
??? ?int value = ret.get();?//?等待任务并获取结果
?std::cout << "value: " << value << std::endl;
?t1.join();
?std::system("pause");
} ? //#include <iostream>???? // std::cout
//#include <future>?????? // std::packaged_task, std::future
//#include <chrono>?????? // std::chrono::seconds
//#include <thread>?????? // std::thread, std::this_thread::sleep_for
//
//
//int countdown(int from, int to) {
//
//??? for (int i = from; i != to; --i) {
//
//??????? std::cout << i << '\n';
//
//??????? std::this_thread::sleep_for(std::chrono::seconds(1));
//
//??? }
//
//??? std::cout << "Lift off!\n";
//
//??? return from - to;
//
//}
//
//
//
//int main()
//
//{
//??? std::packaged_task<int(int, int)> tsk(countdown);?? // set up packaged_task
//??? std::future<int> ret = tsk.get_future();??????????? // get future
//??? std::thread th(std::move(tsk), 10, 0);?? // spawn thread to count down from 10 to 0
//??
//??? for (int i = 0; i < 10; i++) {
//??????? std::cout << "main" << std::endl;
//??? }
//??? int value = ret.get();????????????????? // wait for the task to finish and get result
//??? std::cout << "The countdown lasted for " << value << " seconds.\n";
//??? th.join();
//
//??? std::system("pause");
//??? return 0;
//
//}
内容总结
以上是互联网集市为您收集整理的C++多线程---packaged_task全部内容,希望文章能够帮你解决C++多线程---packaged_task所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。