草庐IT

async-loading

全部标签

c++ - std::async 不并行化任务

在此代码段中使用C++11std::async:intfoo(){::sleep(2);return123;}intmain(){futurer1(async(foo));intr2=foo();cout它产生正确的结果,但连续运行两个foo(整个应用程序运行4秒)。编译为:g++-std=gnu++11-O2foo.cc-lpthread(Ubuntu12.1064位,gcc4.7.2) 最佳答案 您可能需要添加launchpolicystd::launch::async的:std::async(std::launch::asyn

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::atomic::load 的结果使用 Structure dereference(->) 运算符是否安全

在尝试使用std原子指针时,我遇到了以下问题。假设我这样做:std::atomicmyString;////AcanIdothis?myString.load()->size()//BcanIdothis?charmyFifthChar=*(myString.load()->c_str()+5);//CcanIdothis?charmyCharArray[255];strcpy(myCharArray,myString.load()->c_str());我很确定C是非法的,因为myString可能同时被删除。但是我不确定A和B。我认为它们是非法的,因为在执行读取操作时指针可能会被引用。

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++ - 未命中断点 - "the module did not load at the default load address"

我正在尝试调试CPPUnitTests,断点设置在作为待测试DLL(C++非托管dll)一部分的文件中。我将CPPunit测试程序进程附加到打开项目的visualstudioIDE,处于native模式(也尝试过托管+native),然后运行测试,但断点根本没有命中。断点似乎没问题(全红点)。我在DebugBuild中构建了所有必要的DLL。我去Debug->Windows->Modules检查测试程序进程是否加载了我正在调试的DLL,它确实加载了,并且SYmbol文件也被加载了,但是DLL的名称中有一个感叹号和当我将鼠标悬停在它上面时,它说“模块没有在默认加载地址加载”。我该如何解决

c++ - std::atomic::load 的内存排序行为

我是否错误地假设atomic::load也应该充当内存屏障以确保所有先前的非原子写入将对其他线程可见?举例说明:volatileboolarm1=false;std::atomic_boolarm2=false;booltriggered=false;线程1:arm1=true;//std::std::atomic_thread_fence(std::memory_order_seq_cst);//thiswoulddothetrickif(arm2.load())triggered=true;线程2:arm2.store(true);if(arm1)triggered=true;我预

c++ - 避免使用 DirectXMath XMStore/load

我以前做过OpenGL,现在正在学习一些DirectX11。新数学库中的一件事是存在用于vector和矩阵的加载/存储方法(例如http://msdn.microsoft.com/en-us/library/ee415635(v=vs.85).aspx)。对我来说,这让我很奇怪,当我想使用它们时必须存储/加载每个vector和矩阵-很多笨重的代码-我想知道是否有任何好的、干净的替代加载/存储过程? 最佳答案 你可以看看simplemath如果有帮助的话。它现在是DirectXTK的一部分.来自链接站点:WhywrapDirectXM

c++ - Visual Studio 2017 : _mm_load_ps often compiled to movups

我正在查看为我的代码生成的程序集(使用VisualStudio2017)并注意到_mm_load_ps经常(总是?)编译为movups。我使用_mm_load_ps的数据定义如下:structalignas(16)Vector{floatv[4];}//oftenembeddedinotherstructslikethisstructAABB{Vectormin;Vectormax;boolintersection(/*parameters*/)const;}现在,当我使用这个构造时,会发生以下情况://thiscode__mm128bb_min=_mm_load_ps(min.v);

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