草庐IT

hexo-theme-async

全部标签

c++ - std::async 超时

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

c++ - std::async 在指定 launch::async 时不执行

也许我错过了C++11中新std::async的正确用法,但是这个声明(在cppreference.com结束):Iftheasyncflagisset(i.e.policy&std::launch::async!=0),thenasyncexecutesthefunctionfonaseparatethreadofexecutionasifspawnedbystd::thread(f,args...),exceptthatifthefunctionfreturnsavalueorthrowsanexception,itisstoredinthesharedstateaccessibl

c++ - 使用 std::async 调用模板函数的正确方法是什么

我正在尝试了解std::async的用途。我在下面编写了模板函数来将所有条目累积到一个整数数组中。template::value>::type>Tparallel_sum(T(&arr)[N],size_tstart=0,size_tend=N-1){if(end-start,arr,start,mid);autores2=parallel_sum(arr,mid+1,end);returnres2+res1.get();}}当我在main中调用上面的函数时,出现以下编译错误(以及更多错误):errorC2672:'std::async':nomatchingoverloadedfun

c++ - 使用 Xcode 为 macOS 构建时,C++ async 是否使用线程池?

使用平台的标准开发工具和编译器[1],std::async是否为每个后台作业生成一个新的操作系统线程,或者它是否使用线程池或一些基于工作窃取任务队列?Xcode、Clang/LLVM 最佳答案 使用平台标准工具链(Xcode/Clang)构建的应用程序不使用线程池。使用std::async启动的任务的堆栈底部包含std::thread和pthread调用。退出时,每个作业调用pthread_exit()杀死运行它的线程。在为iOS构建时,Xcode8.3.3还在每个使用std::async启动的作业中使用一个操作系统线程(在原始iP

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++ - boost ASIO async_read_some

我在实现一个简单的TCP服务器时遇到了困难。以下代码摘自boost::asioexamples,准确地说是“Http服务器1”。voidconnection::start(){socket_.async_read_some(boost::asio::buffer(buffer_),boost::bind(&connection::handle_read,shared_from_this(),boost::asio::placeholders::error,boost::asio::placeholders::bytes_transferred));}voidconnection::ha

c++ - std::merge 不适用于 std::async

我想在一个单独的线程中合并两个vectorintmain(){vectora(100);vectorb(100);vectorc(200);std::async(std::launch::async,std::merge,a.begin(),a.end(),b.begin(),b.end(),c.begin());}这不编译main.cpp:Infunction‘intmain()’:main.cpp:17:25:error:nomatchingfunctionforcallto‘async(std::launch,,std::vector::iterator,std::vector:

C++11 async 只使用一个核心

我正在尝试在C++中并行化一个长时间运行的函数并使用std::async它只使用一个核心。不是函数的运行时间太短,因为我目前使用的测试数据需要大约10分钟才能运行。根据我的逻辑,我创建了NThreads的Futures(每个Futures都占据循环的一部分而不是一个单独的单元格,因此它是一个很好的长时间运行的线程),每个都将分派(dispatch)一个异步任务。然后在它们被创建之后,程序自旋锁等待它们完成。然而它总是使用一个核心?!这也不是我看顶部并说它看起来大致像一个CPU,我的ZSH配置输出最后一个命令的CPU%,它总是正好100%,从不超过autoNThreads=12;auto

c++ - clang 中带有 std::async 的模板函数

我正在查看std::async的示例here,如下:#include#include#include#include#includetemplateintparallel_sum(RAIterbeg,RAIterend){autolen=std::distance(beg,end);if(len,mid,end);intsum=parallel_sum(beg,mid);returnsum+handle.get();}intmain(){std::vectorv(10000,1);std::cout我尝试使用Clang3.4的网络编译器对其进行编译,结果输出的是Thesumis而不是预

c++ - boost::asio async_accept 拒绝连接

我的应用程序有一个asio服务器套接字,它必须接受来自定义的IP列表的连接。这个过滤器必须由应用程序完成,(而不是由系统),因为它可以随时更改(我必须能够随时更新此列表)客户端必须收到acces_denied错误。我想当handle_accept回调被调用时,SYN/ACK已经被发送,所以当我检测到连接的ipest不允许时不想接受然后粗暴地关闭。我不管理客户端行为,当连接被拒绝并被对等方关闭时,它的行为可能不一样,所以我想把所有事情都做干净。(但这就是我目前的目的)你知道我该怎么做吗???我的访问列表是std::strings的容器(但我可以将它转换成其他东西的计数器......)非常