使用英特尔 TBB,我正在尝试读取文件“串行”,在文件的每一行上应用一个函数,并将结果保存到 A 类型的向量中。
struct A
{
long long time;
double price;
A(long long t, double p) : time(t),price(p){};
}
我创建了以下管道
vector<A> parallelFile(string fileName) {
ifstream fe(fileName);
string orden_fichero;
vector<A> ord;
parallel_pipeline( /*max_number_of_tokens=*/16,
make_filter<void,string>(
filter::serial,
[&](flow_control& fc)->string
{
getline(fe,orden_fichero);
if(fe.eof())
{
fc.stop(); // stop processing
return NULL;
}
else
{
return orden_fichero;
}
}
) &
make_filter<string,A>(
filter::parallel,
[](string p) ->A{
auto position = p.find('"',28);
auto price = stod(p.substr(position+2));
auto time = dateToMs2(p.substr(0,26).c_str());
return A(time, price);
}
) &
make_filter<A,void>(
filter::serial,
[&ord](A x) {ord.push_back(x);}
)
);
return ord;
}
int main()
{
vector<A> david=parallelFile("input.txt");
return 0;
}
其中 dateToMs 是一个返回 long long 的函数。
执行此管道 y 有以下错误:
TBB Warning: Exact exception propagation is requested by application but the
linked library is built without support for it
terminate called after throwing an instance of 'tbb::captured_exception'
what(): basic_string::_M_construct null not valid
Aborted (core dumped)
我已经看到管道的第一个过滤器读取了所有文件,并且错误出现在文件末尾。
我做错了什么?
编辑:文件的每一行具有以下结构:dd-mm-yyyy hh:mm:ss.msmsms "CompanyName" ff.ff
在哪里:
- dd-mm-yyyy 是以日-月-年形式表示的日期
- hh:mm:ss.212313 是以小时分钟秒和毫秒为单位的日期
- "companyName" 是一个字符串
- ff.ff 是双重的