【发布时间】:2011-09-07 19:19:42
【问题描述】:
使用 Visual Studio 2010 SP1
所以我有一个 std::for_each 使用 boost::filesystem 库对大量文件进行迭代。 因为这些迭代不会相互混淆,所以我试图让多线程处理它,所以我尝试使用 VS 2010 库 PPL。
旧: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 与 boost 的讨论还没有那么多。
提前致谢。
【问题讨论】:
-
一种解决方法是遍历所有目录并将它们添加到支持随机访问迭代器的容器中。然后您可以在新容器上使用 parallel_for_each。
-
"它要求随机访问迭代器或前向访问迭代器,我认为 directory_iterator 不是" 正确 --
directory_iterator是 single pass iterator。 -
感谢您的提示。 Fox32:现在我因为没有想到这一点而感到愚蠢.. 用一些不干净的代码尝试了它,它工作了,不仅如此,我还通过添加几行代码赢得了很多性能。再次感谢:)
标签: c++ visual-studio-2010 boost c++11