微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 istream 拆分为多个部分并在单独的线程中处理每个部分

如何解决将 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 举报,一经查实,本站将立刻删除。