【发布时间】:2018-06-14 03:31:17
【问题描述】:
我正在开发一个并发程序;它有两个线程,一个监听来自服务器的消息,另一个向它发送消息。 我需要从用户那里获取命令(使用 cin?)并同时显示来自服务器的消息。
我该如何处理这种情况?问题是,如果我在收到消息时正在读取用户的命令,那么用户的输入就会与其他内容混淆。
提前致谢
【问题讨论】:
-
仅使用
cin和cout将输入和输出与普通命令行窗口或终端混合是非常困难的。如果您远离 C++ 标准输入和输出流,同时仍将其保持在文本模式,那么您将拥有类似 ncurses 的内容。否则,您可以做一个非常简单的 GUI 前端程序,它执行您的主程序,并将输入写入主程序的标准输入,并读取其标准输出以显示。 -
在 Unix/Linux 上使用 GUI 的解决方案可能是:创建一个新终端(窗口或拆分现有终端)并将输出重定向到另一个终端。
-
我曾经以一种非常简单的方式做到这一点:使用非回显的 getchar 函数读取键输入。 (这不是可移植的,但我找到了适用于 Windows 和 Linux 的解决方案,目前已经足够了。)当前输入缓冲在
std::string中,并由我自己的代码回显。每当输出完成时,当前回显的输入被擦除(couting 适当数量的"\b \b")输出内容被打印并且当前输入缓冲区再次回显。这是示例代码的一部分。这就是为什么保持简短比完美或最用户舒适更可取的原因......
标签: c++ concurrency io