如何在C ++控制台应用程序中将输入与输出分开?我可以有两个游标吗?

时间:2014-01-18 16:18:47

标签: c++ multithreading console command-line-interface

我来自C并且没有太多的编程知识,所以如果我的想法是无稽之谈请耐心等待。

现在,我正在尝试编写一个带有双缓冲控制台输出的简单线程应用程序。我有一个线程可以重置光标位置,绘制缓冲区然后等待n毫秒:

gotoxy(0, 0);
std::cout << *draw_buffer;
std::this_thread::sleep_for(std::chrono::milliseconds(33));

这非常有效。缓冲区由另一个线程独立填充,也没有问题。

现在我希望用户能够提供应用程序信息。但是,我的绘图线程总是将光标放回到开头,因此用户输入和应用程序输出将发生干扰。我知道有像curses这样的库,但如果可能的话,我更愿意自己编写。不幸的是,我还没有找到任何解决方案。我想没有办法让两个控制台游标独立移动?我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:0)

我认为你需要做两件事:

  • 创建一个控制哪个线程正在写入stdout的互斥锁。
  • 更改输入模式,以便在调用getchar时立即返回(而不是等待用户按Enter键)。然后,您可以等待另一个线程释放互斥锁,然后移动光标并回显用户在屏幕的相应部分按下的字符。

您可以使用tcsetattr更改输入模式,尽管这是来自用于* nix系统的termios。由于您使用的是Windows,除非您使用的是cygwin,否则这可能对您不起作用。

或许可以查看:What is the Windows equivalent to the capabilities defined in sys/select.h and termios.h