【问题标题】:Prevent mixing of console output and written text防止混合控制台输出和书面文本
【发布时间】:2013-10-06 13:25:40
【问题描述】:

我有一个 C++ 控制台应用程序,它不断打印一些输出,同时它还接受来自用户的命令(使用 std::cin) - 输出和输入发生在不同的线程中。
如果我在出现一些输出时写了一个文本,那么写的文本会与应用程序输出混合在一起。我怎样才能防止这种行为?

为了解决这个问题,我需要在输入文本的那一行显示一行。我会在 Minecraft Bukkit 服务器的解决方案中激发自己的灵感 - 但是对于 C++,我需要相同的解决方案。

【问题讨论】:

  • 那么,期望的行为是什么?发生这种情况是很自然的。如果您想要控制台聊天客户端(例如irssi),请查看ncurses 之类的库,而不是尝试仅将其与cin/cout 一起修补。
  • 你可以使用一些锁...
  • @Jarod42 这听起来不是个好主意。在聊天程序的示例中,这意味着一旦您开始输入,您会错过所有条新消息,直到您按下回车键,然后才能看到它们。

标签: c++ stdout


【解决方案1】:

假设您希望在输入内容时显示输出,您将需要一些屏幕控制工具来使输出到达不同于输入区域的位置。如果我的任务是在终端上实现类似这样的写作,我会刷新我的ncurses 体验。我知道您使用的是 Windows 控制台,但我不知道 Windows 控制台是否能够实现所需的屏幕控制。

您可以使用幕后的 curses 功能将自定义流缓冲区绑定到 std::cinstd::cout,但这可能不值得。无论如何,这都不是微不足道的。

【讨论】:

    【解决方案2】:

    有一个 Windows 端口的 ncurses 称为 pdcurses。但是,如果您使用的是 Visual Studio,则提供了一个名为 SetConsoleCursorPosition() 的简单函数

    【讨论】:

    • 我可以使用该函数将光标放在std::couts 输出下方一行吗?
    猜你喜欢
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多