草庐IT

future_fib

全部标签

c++ - 为最终的 future 自定义内存分配器做准备

我的项目是在c++11中,使用vs2012。现在我觉得不需要使用自定义内存管理,但是我应该采取什么安排以促进最终的future修改?我想过为“new”/“new[]”/“delete”/“delete[]”使用宏,为容器和智能指针使用typedef。什么是最佳实践? 最佳答案 在我看来,您所要做的基本上就是确定您将在整个实现过程中使用的特定约定。让你的架构分配器知道的一个很好的模板是看看这是如何为STL容器实现的,并尝试设计你像它们一样的数据结构。例如,如果您在std::vector上查找示例interface此容器的第二个参数始终

c++ - std::future 什么时候执行?

创建线程时启动策略设置为std::launch::async,在cppreference上给出的描述是anewthreadislaunchedtoexecutethetaskasynchronously如果我有一些任意函数doubleFoo(doublei){returni*5.0;}然后我像这样设置了一个异步调用std::vectorvalues{5.0,2.3,7.1,4.8,1.5};std::vector>answers;for(doublevalue:values){answers.push_back(std::async(std::launch::async,Foo,val

c++ - 在所有 std::futures 完成之前从函数返回是否安全?

我有这样的代码:intfunction(){std::vector>futures;for(constauto&elem:elements){futures.push_back(std::async(&MyClass::foo,myClass,elem);}for(auto&f:futures){constintx=f.get();if(x!=0)returnx;}}当有未完成的异步调用时,我可以从函数中返回吗?我只对一个非零值感兴趣。我应该等到所有异步调用完成吗?这段代码安全吗? 最佳答案 std::future的析构函数(当通过

c++ - "reserve or shrink"的正确方法指向已知 future 容量需求的 vector

我已经围绕一个长期存在的vector的共同主题编写了无数软件模块,有时(以未指定的频率)必须更新其内容。惯用语实现:voidLongLived::reconfigure(constInputT&whatever_input){m_vector.clear();m_vector.reserve(whatever_input.size());populate(m_vector,whatever_input);}请注意,惯用的实现方式永远不会减少其内部缓冲区的容量。如果这不行怎么办?只需使用shr​​ink_to_fit(),我想:voidLongLived::reconfigure(con

c++ - 循环 : future iterations overwrite results of previous iterations 中的 If-else 条件

我尝试在items列表中突出显示selectedItem及其children。constQListitems=/*...*/;Item*selectedItem=/*...*/;Q_FOREACH(Item*item,items){if(selectedItem==item){item->setHighlightEnabled(true);//Highlightselecteditem}else{item->setHighlightEnabled(false);//De-highlightotheritems}}item->setHighlightEnabled方法递归地对子项执行相同

c++ - 在调用 future.get() 之前销毁 std::promise 是否可以?

我想知道是否可以调用promise.get_future(),将future移到其他地方(例如,放入vector中)并可能让promise在调用future.get()之前就死掉。在以下示例中,调用gateway->refreshWithCallback在线程中执行lambda,这样即使在第二个循环中future.get()尚未调用,共享指针也可以释放promise,这似乎有效,但我很生气!std::vector>futures;for(GuiGateway*gateway:gateways){std::shared_ptr>shared_promise_ptr(newstd::pro

C++11 future.wait_for() 总是返回 future_status::timeout

我有一个C++11程序来检查一个数是否为素数。程序等待准备就绪的future对象。准备就绪后,程序会告知future对象的提供者函数是否认为该数字是质数。//futureexample#include//std::cout#include//std::async,std::future#include//std::chrono::millisecondsconstintnumber=4;//444444443//anon-optimizedwayofcheckingforprimenumbers:boolis_prime(intx){for(inti=2;ifut=std::async

c++ - std::future.get() 有时卡在 os x 中

我有两个线程,一个线程应该接收和处理来自另一个线程的请求。第二种是同步传输请求和接收响应。我尝试了以下方案:成对队列(值(value),promise)。第一个线程创建一个promise并将其插入同步队列并等待future.get()的返回值问题是有时线程卡在future.get()上,但是当我暂停程序执行并继续时它再次正常工作。这个stucks具有随机​​性。FutureQueue.h#ifndefFutureQueue_h#defineFutureQueue_h#include#include#include#include#includetemplateclassWork{pub

c++ - 在 MSVC 的 Debug模式下分配给 std::future 时崩溃

与Release不同,在Debug模式下使用MSVC构建时,以下代码会随机崩溃。#includeusingnamespacestd;intmain(){autol=[](){};autof=async(launch::async,l);for(inti=0;i控制台输出显示:f:\dd\vctools\crt\crtw32\stdcpp\thr\mutex.c(51):mutexdestroyedwhilebusy完整的调用栈是:https://pastebin.com/0g2ZF5C1现在显然这只是一个压力测试,但我是不是在做一些非常愚蠢的事情?在我看来,将新任务重新分配给现有的fu

c++ - std::future::wait_for 虚假唤醒?

std::condition_variable::wait_for采用可选谓词在内部处理虚假唤醒。std::future::wait_for没有任何此类可选参数。如果我想确保等待指定的超时时间至少,或者是否已经以其他方式处理,是否需要防止虚假唤醒? 最佳答案 只有条件变量可以“虚假地”唤醒。显然,允许虚假唤醒简化了某些系统上条件变量的实现。(C++编程语言第4版。) 关于c++-std::future::wait_for虚假唤醒?,我们在StackOverflow上找到一个类似的问题: