将ostream转换为iostream

时间:2014-01-13 11:11:00

标签: c++ iostream producer-consumer

我有两个函数,让我们称它们为producer(std::ostream& output)consumer(std::istream& input),我需要将生产者的输出链接到消费者。现在我这样做:

std::stringstream temp;
producer(temp);
consumer(temp);

这有两个半明显的缺点。首先,对我来说较小的问题是内存使用情况。生产者生成大约20MB的数据,这一切都必须存储。更大的问题是速度。消费者通常只需要从输入流中读取几个字节,但生产者需要生成所有字节。此外,这对生产者生成的潜在无限流也无效。

我是否可以使用任何魔术适配器而不是stringstream只能缓冲所需的最小数据量然后在生产者和消费者之间切换?

我有一个想法(非常具体的一个:-))这种协同程序的东西可能以某种方式用setjmplongjmp完成,但我从未使用过这些函数和我觉得这会有一些问题。

我只是出于好奇而问这个问题,因为我喜欢简单的解决方案。我知道我可以通过将producer从函数直接转换为istream来解决这个问题。

编辑:我的hypotetical适配器的行为是这样的:

  1. 让生产者运行,直到它将一些字节写入其ostream,缓冲数据
  2. 暂停制作人,切换到消费者
  3. 让消费者一直运行,直到它读取缓冲数据
  4. 暂停使用者,切换到制作人
  5. 转到1
  6. 这里不应该有线程。

0 个答案:

没有答案