草庐IT

future-swap

全部标签

c++ - 在同一个线程的同一个实例上多次调用 shared_future::get() 是否合法?

我找不到关于此事的直接确认或反驳。所有答案似乎都解决了“从多线程访问”方面的问题,而不是重复访问本身。标准是否定义了std::shared_future的行为?boost::shared_future怎么样? 最佳答案 根据std::shared_future::valid中的cppreferenceUnlikestd::future,std::shared_future'ssharedstateisnotinvalidatedwhenget()iscalled.这是有道理的。如果不是这种情况,那么您将无法让多个线程调用get。.我

c++ - 开发中如何避免 "swapping of death"?

可能每个人在开发过程中都至少遇到过一次这个问题:while(/*someconditionherethatsomehowneverwillbefalse*/){...yourvector.push_back(newSomeType());...}当您看到程序开始耗尽所有系统内存时,您的程序挂起并且您的系统开始疯狂交换。如果您没有足够快地识别问题并终止进程,您可能会在几秒钟内得到一个无响应的系统,您的鼠标指针甚至不会移动。您可以等待程序因“内存不足”错误而崩溃(这可能需要很长时间),或者在您的计算机上进行重置。如果您不能立即追踪到错误,那么您将需要多次测试和重置才能找出最烦人的错误...

c++ - 为什么我们需要 std::promise 和 std::future?

我想知道为什么我们同时需要std::promise和std::future?为什么C++11标准将get和set_value分成两个单独的类std::future和std::promise?在这个post的答案中,它提到:Thereasonitisseparatedintothesetwoseparate"interfaces"istohidethe"write/set"functionalityfromthe"consumer/reader".我不明白躲在这里有什么好处。但是如果我们只有一个类“future”不是更简单吗?例如:promise.set_value可以替换为future

c++ - 当涉及分配器时,是否有类似于 copy-and-swap 习惯用法的东西?

关于copy-and-swap习语有几个很好的答案,例如explainingthecopyandswapidiom和explainingmovesemantics.适用于复制和移动分配的基本习惯用法如下所示:T&T::operator=(Tother){this->swap(other);return*this;}此作业适用于复制和移Action业,因为other复制或移动构造取决于赋值的右侧是左值还是右值。现在让有状态分配器进入画面:ifT在分配器类型上进行参数化,例如std::vector,上面的成语并不总是有效!具体来说,std::allocator_traits包含三种类型,指

c++ - 使用 std::packaged_task 时 std::future 仍然延迟(VS11)

看来除非你调用std::async一个std::future绝不会设置为除future_status::deferred以外的任何其他状态除非你调用get或wait关于future。wait_for&wait_until将继续不阻塞并返回future_status::deferred即使任务已经运行并存储了结果。这是一个例子:#includevoidmain(){autofunc=[](){return5;};autoasyncFuture=std::async(std::launch::async,func);autostatus=asyncFuture.wait_for(std::

c++ - 为什么两阶段查找会无法选择 'swap' 的重载版本?

我在学习thisfascinatinganswer到subtlequestion关于为用户定义类型实现swap函数的最佳实践。(我的问题最初是由discussionoftheillegalityofaddingtypestonamespacestd激发的。)我不会在此处重新打印上面链接的答案中的代码片段。相反,我想理解答案。我上面链接的答案在第一个代码片段下方,关于在namespacestd中重载swap(而不是在那个命名空间中专门化它):Ifyourcompilerprintsoutsomethingdifferentthenitisnotcorrectlyimplementing"

c++ - 为什么 C++ 异步在没有 future 的情况下按顺序运行?

#include#includevoidmain(){std::async(std::launch::async,[]{std::cout在这段代码中,只会输出“async...”,也就是说这段代码是阻塞在async的。但是,如果我添加future并让语句变为:std::futurefut=std::async([]{std::cout然后一切顺利(不会阻塞)。我不确定为什么会这样。我认为异步应该在单独的线程中运行。 最佳答案 来自encppreference.com:Ifthestd::futureobtainedfromstd:

C++20 协程 : implementing an awaitable future

自从协程TS在Kona的ISOsession上被接受到C++20中后,我开始自己尝试一下它们。Clang已经对协同程序提供了不错的支持,但仍然缺乏库支持的实现。特别是Awaitable类型,例如std::future、std::generator等还没有实现。因此,我决定让std::future成为可等待的。我主要关注talkbyJamesMcNellisatCppCon2016,特别是这张幻灯片:现在是2019年,我实际上在处理这张幻灯片上的代码(大概未经测试?)时遇到了一些问题:在我看来,重载operatorco_await已经不是问题了?相反,应该使用promise_type的可

c++ - 关于根据 move 赋值和 move 构造函数实现 std::swap

这里是std::swap的可能定义:templatevoidswap(T&a,T&b){Ttmp(std::move(a));a=std::move(b);b=std::move(tmp);}我相信std::swap(v,v)保证没有效果并且std::swap可以如上实现。在我看来,以下引述暗示这些信念是矛盾的。17.6.4.9函数参数[res.on.arguments]1EachofthefollowingappliestoallargumentstofunctionsdefinedintheC++standardlibrary,unlessexplicitlystatedother

c# - 面向 future 的大型 UI 应用程序 - 具有 2008 功能包的 MFC 或 C# 和 Winforms?

我的公司使用VisualC++中的MFC作为UI开发的事实标准开发了一个长期存在的产品。我们的代码库包含大量必须保持运行的遗留/陈旧代码。其中一些代码比我还早(最初是在70年代后期编写的),我们团队的一些成员仍在使用VisualStudio6。不过,值得庆幸的是,内部得出的结论是,与竞争对手的产品相比,我们的产品看起来有些过时,需要采取一些措施。我目前正在开发UI的一个新区域,该区域与产品的其余部分完全不同。因此,我有机会尝试"new"技术堆栈,作为一种试验场,然后再开始漫长的UI其余部分迁移过程。我在业余时间使用C#与WindowsForms和.netFramework有一段时间并且