2011-06-07 87 views
2

我在我的程序中有线程,我想把字符放入流并在另一个线程中读取,但在std :: cin.putback()之后我需要从键盘写入某些东西来唤醒main函数中的std :: cin。我能做些什么来自动阅读吗?std :: cin.putback()和“唤醒”它

回答

3

这不是流如何工作。该std::cin读取来自你的程序的标准输入外数据和putback只允许保留一个字符,你实际上只是读回缓冲区重新解析下次调用operator>>(或getgetline或其他读法)。

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

这是不可能使用流,至少那些由标准库提供的,因为stringstream不是线程安全的,fistream/fostream不能从原始文件句柄创建的,所以你不能将它们与POSIX相结合pipe功能。将一个消息队列封装在一个流中是可能的(并且boost可以为你提供足够的工具),但是原始消息队列API可能是合适的。