使用Visual Studio 2010 SP1
所以我有一个std :: for_each使用boost :: filesystem库迭代大量文件。 因为那些迭代不会互相混淆我试图让多线程工作,所以我试图使用VS 2010库PPL。
old:for_each(directory_iterator(path), directory_iterator(), <lambda function>);
新:parallel_for_each(directory_iterator(path), directory_iterator(), <lambda function>);
事情是,parallel_for_each没有编译,因为它要求一个随机访问迭代器或一个前向访问迭代器,我假设directory_iterator不是。 有没有办法让directory_iterator在这种情况下工作?也许有一个不同的迭代器,我不知道或可能是某种演员?
试图在网上搜索答案,但PPL与提升并没有真正谈论过。
提前感谢。
答案 0 :(得分:1)
如果您花费大部分时间来加载文件,那么您只是通过尝试加载多个文件来减慢速度。也就是说,如果你的工作受到处理限制,你可以这样做:
for each file // serial
{
load file into memory
spawn task to process file // concurrent
}
wait until tasks to complete
为此,您需要使用tasks。