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

发布于 2024-11-14 09:21:31 字数 115 浏览 2 评论 0原文

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

I have threads in my program and I want to put character into stream and read it in another thread, but after std::cin.putback() I need to write something from keyboard to "wake up" std::cin in function main. Can I do something to read automatically?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你与昨日 2024-11-21 09:21:31

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

如果你想在线程之间进行通信,你应该使用一些线程库中的消息队列,例如 Boost 提供了一个不错的可移植性一。

不可能使用流,至少是标准库提供的流,因为 stringstream 不是线程安全的,而 fistream/fostream 可以'不是从原始文件句柄创建的,因此不能将它们与 POSIX pipe 函数结合起来。可以将消息队列包装在流中(boost 为您提供了足够的工具来做到这一点),但原始消息队列 API 可能会合适。

That's not how streams work. The std::cin reads data that come from outside your program to standard input and the putback only allows keeping a character that you actually just read back to the buffer for re-parsing next time you invoke operator>> (or get or getline or other read method).

If you want to communicate between threads, you should use a message queue from some threading library, e.g. Boost provides a decent portable one.

It is not possible to use streams, at least those provided by standard library, because stringstream is not thread-safe and fistream/fostream can't be created from raw file handle, so you can't combine them with POSIX pipe function. It would be possible to wrap a message queue in a stream (and boost gives you enough tools to do it), but the raw message queue API will probably be suitable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文