jjzjj

stdasync

全部标签

c++ - 多个 std::threads 和主程序执行的问题

几天来,我一直在努力想出一种机制来启动一些计时器,而不是让它为主程序执行计时。.join()和.detach()、wait_until()等的组合我有一个std::thread的vector,我想:执行第一个位置等待它完成执行下一个位置等待它完成与此同时,我的应用程序的其余部分正在运行,用户点击东西等。我想出的一切似乎要么:在计时器运行时阻止主程序运行或从主线程分离,但计时器同时运行,我多么希望在前一个完成后再运行一个。我什至发布了:C++11std::threadsandwaitingforthreadstofinish但我似乎无法理解任何一个解决方案。我应该使用std::launc

c++ - "no matching function for call to ‘async(std::launch, <unresolved overloaded function type>, std::string&)’“

我正在尝试使用std::async创建线程,但我不断收到错误“没有匹配函数调用‘async(std::launch,,std::string&)’”在行上ConnectFuture=std::async(std::launch::async,Connect_T,ip);这是产生这种行为的代码:#includeclasslibWrapper{public:voidConnect(std::stringip);voidConnect_T(std::stringip);private:std::futureConnectFuture;};voidlibWrapper::Connect(std

c++ - std::async 超时

有没有办法在std::async方法中实现超时,所以如果线程在指定的时间内没有完成,我希望这个调用超时并完成。我该如何实现此功能。 最佳答案 没有(标准的)方法可以进入线程并杀死它,无论如何这通常不是一个好主意。更简洁的选择是将开始时间和最长持续时间传递给函数,然后(可能随着计算的进行多次)检查当前时间减去开始时间是否太长。我会做这样的事情:#includetemplateclasstimeout{public:typedefClockclock_type;typedeftypenameclock_type::time_pointt

c++ - 将函数直接传递给 std::async 和使用 std::bind 有什么区别?

我最近开始向我正在处理的库添加异步支持,但我遇到了一个小问题。我从这样的事情开始(稍后会有完整的上下文):returnexecuteRequest(false,d,&callback,false);那是在添加异步支持之前。我试图将其更改为:returnstd::async(std::launch::async,&X::executeRequest,this,false,d,&callback,false);但是编译失败。MCVE:#include#includeintcallback(constint&t){std::coutTexecuteRequest(boolmethod,Req

c++ - std::thread 有多标准?

我注意到很多经典的C++引用资源已经针对C++11进行了更新,例如cplusplus.com和JosuttisStandardLibraryReference本书,似乎没有涵盖/根本没有任何关于C++11并发标准库功能的文档,例如std::thread、std::atomic和std::async。这些并发特性是否比标准库的其余部分“不那么标准”?还是由于其他原因缺少文档? 最佳答案 您引用的所有库确实是C++11标准的一部分。事实上,许多语言规则都经过重新编写以描述操作在多线程环境中的工作方式(以前,规范没有指定线程如何工作的任何

c++ - 将 std::async 与模板函数一起使用

我如何,或者,我可以将模板函数传递给async?代码如下://main.cpp#include#include#include#includeintmain(){std::vectorv(16,1);autor0=std::async(std::launch::async,std::accumulate,v.begin(),v.end(),double(0.0));std::cout错误信息如下:^a.cpp:13:88:note:candidatesare:Infileincludedfroma.cpp:1:0:/usr/include/c++/4.8/future:1523:5:n

c++ - std::async 与重载函数

PossibleDuplicate:std::bindoverloadresolution考虑以下C++示例classA{public:intfoo(inta,intb);intfoo(inta,doubleb);};intmain(){Aa;autof=std::async(std::launch::async,&A::foo,&a,2,3.5);}这给出了“std::async”:无法推断模板参数,因为函数参数不明确。我该如何解决这种歧义?? 最佳答案 帮助编译器解决歧义,告诉你想要哪个重载:std::async(std::la

c++ - std::future 作为函数 C++ 的参数

考虑下面的代码voidprintPromised(std::futuref){std::cout它说“这是一个已删除的功能”。这是为什么?此外,我需要将std::async生成的相同promise结果传递(共享)给多个用户。这意味着当有人调用get()函数时,我需要传递相同的结果(如果它已经生成,我不需要使用std::async重新生成结果)而且我需要std::future::get拥有的阻塞机制。 最佳答案 只有一个future。您不能拥有同一个future的多个拷贝。所以你需要将future的所有权转让给函数:printProm

c++ - std::future 作为函数 C++ 的参数

考虑下面的代码voidprintPromised(std::futuref){std::cout它说“这是一个已删除的功能”。这是为什么?此外,我需要将std::async生成的相同promise结果传递(共享)给多个用户。这意味着当有人调用get()函数时,我需要传递相同的结果(如果它已经生成,我不需要使用std::async重新生成结果)而且我需要std::future::get拥有的阻塞机制。 最佳答案 只有一个future。您不能拥有同一个future的多个拷贝。所以你需要将future的所有权转让给函数:printProm

c++11 异步延续或尝试 .then() 语义

以下代码基于HerbSutter's实现.then()类型延续的想法。templateautothen(Futf,Workw)->std::future{returnstd::async([=]{w(f.get());});}这将被用作autonext=then(f,[](intr){go_and_use(r);});或类似的。这是一个巧妙的想法,但就目前而言是行不通的(future只能移动,不可复制)。我确实喜欢这个想法,因为据我所知,它可能会出现在即将发布的c++版本中(尽管是.then()甚至等待。)在共享futures或类似的东西之前,我想知道堆栈溢出社区会如何看待这个实现,特
12