std :: cin.putback()并“唤醒”它

时间:2011-06-07 10:51:53

标签: c++ multithreading io

我的程序中有线程,我想将字符放入流中并在另一个线程中读取它,但是在std :: cin.putback()之后我需要从键盘写一些东西来“唤醒”std :: cin在功能主。我可以自动阅读吗?

1 个答案:

答案 0 :(得分:3)

这不是流的工作方式。 std::cin将来自程序外部的数据读取到标准输入,而putback只允许将实际上刚读取的字符保留回缓冲区以便下一步重新解析您调用operator>>(或getgetline或其他阅读方法)的时间。

如果要在线程之间进行通信,则应使用某些线程库中的消息队列,例如: Boost提供了一个体面的便携式。

无法使用流,至少是标准库提供的流,因为stringstream不是线程安全的,并且无法从原始文件创建fistream / fostream handle,因此您无法将它们与POSIX pipe函数结合使用。可以在流中包装消息队列(并且boost为您提供了足够的工具),但原始消息队列API可能是合适的。