此处已明确标记为"未来"已删除
'future' has been explicitly marked deleted here
我正在尝试构建一个异步应用程序以允许并行处理大型列表,经过两天的谷歌搜索学习C++,我从以下代码中发现了标题错误:
//
// main.cpp
// ThreadedLearning
//
// Created by Andy Kirk on 19/01/2016.
// Copyright © 2016 Andy Kirk. All rights reserved.
//
#include <iostream>
#include <thread>
#include <vector>
#include <chrono>
#include <future>
typedef struct {
long mailing_id;
char emailAddress[100];
} emailStruct ;
typedef struct {
long mailing_id = 0;
int result = 0;
} returnValues;
returnValues work(emailStruct eMail) {
returnValues result;
std::this_thread::sleep_for(std::chrono::seconds(2));
result.mailing_id = eMail.mailing_id;
return result;
}
int main(int argc, const char * argv[]) {
std::vector<emailStruct> Emails;
emailStruct eMail;
// Create a Dummy Structure Vector
for (int i = 0 ; i < 100 ; ++i) {
std::snprintf(eMail.emailAddress,sizeof(eMail.emailAddress),"user-%d@email_domain.tld",i);
eMail.mailing_id = i;
Emails.push_back(eMail);
}
std::vector<std::future<returnValues>> workers;
int worker_count = 0;
int max_workers = 11;
for ( ; worker_count < Emails.size(); worker_count += max_workers ){
workers.clear();
for (int inner_count = 0 ; inner_count < max_workers ; ++inner_count) {
int entry = worker_count + inner_count;
if(entry < Emails.size()) {
emailStruct workItem = Emails[entry];
auto fut = std::async(&work, workItem);
workers.push_back(fut);
}
}
std::for_each(workers.begin(), workers.end(), [](std::future<returnValues> & res) {
res.get();
});
}
return 0;
}
真的不知道我做错了什么,并且找到了有限的答案搜索。 如果相关的话,它在OSX 10和XCode 7上。
future
类删除了其复制构造函数,因为您真的不想拥有它的多个副本。
要将其添加到向量中,您必须移动它而不是复制它:
workers.push_back(std::move(fut));
如果要将未来对象(在线程内)传递给需要按值传递的函数,也会引发此错误。
例如,当您通过未来时,这将引发错误:
void multiplyForever(int x, int y, std::future<void> exit_future);
multiplyForever(3, 5, fut);
您可以通过引用传递未来来修复它:
void multiplyForever(int x, int y, std::future<void>& exit_future);
multiplyForever(3, 5, fut);
相关文章:
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 从链接列表c++中删除一个项目
- 在Linux中哪里可以找到互斥、未来等的源代码
- C++如何通过用户输入删除列表元素
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 使用函数"remove"删除重复元素
- 如何从多映射中删除特定的重复项
- 运算符C++ "delete []"仅删除 2 个前值
- 删除指向指针的指针是运行时错误吗
- 将指针设置为"nullptr"并不能防止双重删除?
- 为什么示例代码访问IUnknown中已删除的内存
- 如何通过 getter 函数删除矢量的元素?
- 从控制台中删除最后打印的元素
- QVTKWidget在VTK 8.1中已弃用,并将在未来的版本中删除
- 此处已明确标记为"未来"已删除