如何解决将 istream 拆分为多个部分并在单独的线程中处理每个部分
谷歌搜索只给出了如何分割字符串的答案。但我的问题是以某种方式将输入流(istream&输入)“分割”成或多或少相等的部分而不复制所有字符串 ,然后在单独的异步线程中处理这些部分。 我尝试过的:使用
input.seekg(0,input.end);
size_t total_chars = input.tellg();
input.seekg(0,input.beg);
获取流中的总字符数并除以线程数,因此每个 input_part 中包含的字符的大致数量是已知的。 但是,如何在不复制数据的情况下拆分流? 我需要输入一个函数:
Stats ProcessSingleThread(const set<string>& key_words,istream& input_part) {
Stats result;
while (getline(input,line)) {
getline(input,line);
result += ProcessLine(key_words,line);
}
return result;
}
从包含所有行的 istream& input
到然后在 async() 中调用 ProcessSingleThread,在 4 个线程中处理输入。
感谢您的帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。