【发布时间】:2018-01-27 20:30:54
【问题描述】:
我有一个类似的课程:
struct orden
{
long long time;
double price;
const char* time1;
orden(const char* t, double p) : time1(t),price(p){};
void convertToMs()
{
time = dateToMs2(time1);
}
};
我正在做的是串行读取文件,执行结构的构造函数并将生成的对象保存在 orden 的向量中:
vector<orden> ord;
ifstream fe(filename)
while(getline(fe,order_line))
{
price = stod(order_line.substr(position+2));
time = order_line.substr(0,26).c_str();
ord.push_back(time, price);
}
那么,我要并行执行的就是执行成员函数convertToMs()。但是我遇到了问题,因为编译器要求我只在 parallel for 中执行常量函数。
我尝试了一些想法,我发现像this one 没有成功,因为它们没有将执行结果保存在对象的参数中。
我做错了什么?
提前谢谢你
编辑:
如果我使用
struct orden
{
long long time;
double price;
const char* time1;
orden(const char* t, double p) : time1(t),price(p){};
void convertToMs() const
{
time = dateToMs2(time1);
}
};
我有以下错误:
In file included from pract1.cpp:5:0:
orden.h: In member function ‘void orden::convertToMs() const’:
orden.h:29:27: error: assignment of member ‘orden::time’ in read-only object
time = dateToMs2(time1);
如果我删除 const 我有以下一个:
pract1.cpp: In lambda function:
pract1.cpp:158:43: error: passing ‘const value_type {aka const orden}’ as ‘this’ argument discards qualifiers [-fpermissive]
ordersOfTheCompany[j].convertToMs();
^
In file included from pract1.cpp:5:0:
orden.h:27:8: note: in call to ‘void orden::convertToMs()’
void convertToMs()
编辑 2:
再次抱歉,我有以下代码:
vector<orden> ord;
while(getline(fe,order_line))
{
price = stod(order_line.substr(position+2));
time = order_line.substr(0,26).c_str();
ord.push_back(time, price);
}
tbb::parallel_for(tbb::blocked_range<size_t>(0,ord.size()),
[=](tbb::blocked_range<size_t>& r) {
for(std::size_t j=r.begin(); j!=r.end(); ++j)
{
ord[j].convertToMs();
}});
我正在尝试并行执行成员函数
【问题讨论】:
-
你从编译器得到什么错误信息?这也缺少minimal reproducible example。特别是,它缺少几个使用的变量的声明。
-
@1201ProgramAlarm 抱歉,我已经编辑了错误的问题
-
您的parallel_for有问题,但显示的代码中没有。
标签: c++ methods parallel-processing tbb