更新和多个控制台窗口

时间:2010-10-08 01:02:33

标签: c++ c console-application

我想编写一个简单的c ++ / c控制台应用程序,以显示我的进程1%2%。 现在,我一行一行地打印出来,如

finished 1%
finished 2%

如何在不打印新行的情况下更新百分比x%?

另外,我想打开两个控制台窗口,一个显示消息,一个显示上面的过程。如何打开另一个控制台窗口?

4 个答案:

答案 0 :(得分:2)

在大多数终端上,您可以打印ASCII回车'\ r'(十进制值13),将光标返回到当前行的左侧,允许您覆盖之前的值。或者,您可以发送退格('\ b',ASCII 8)以向左移动单个字符。它们都不会自动删除已显示的内容,但您可以随时覆盖您不想再看到的任何空格。或者,您可以使用特定控制台支持的控制代码(例如vt100,vt220 ......),这些控制代码可能具有更多高级功能,例如“清除到行尾”。许多库可用于检测终端类型并使用它支持的代码,或者在必要时从许多更简单的库中综合高级操作:在Linux和UNIX上,ncurses库是一个不错的选择。

C ++没有控制台窗口的概念。打开第二个窗口很大程度上取决于您正在使用的操作系统,也可能取决于您指定的图形库。但是,在任何操作系统上,您都可以让应用程序将一些消息写入文件,然后从您自己打开的另一个窗口中检查该文件。在Linux / UNIX上,实用程序“less”非常适合检查日志文件 - 并且在您运行较少时向您显示内容,您可以要求它在写入文件时“跟踪”新数据。

答案 1 :(得分:1)

在Windows上,您可以将光标移动到屏幕上的任何位置,然后从那里开始打印:

COORD c;
c.X = x; c.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);

当然,您需要包含windows.h

答案 2 :(得分:0)

您可以通过多种方式更新进度消息。您可以打印退格字符以将光标向左移动,然后在旧输出上进行写入。如果您的控制台支持ANSI转义序列,则可以使用转义序列来清空该行并重新绘制它。

使用的最佳技术可能取决于您使用的控制台(不同的控制台支持不同的东西)。你使用什么平台,以及什么控制台?

答案 3 :(得分:0)

您似乎在谈论Windows控制台应用程序。

每个Windows进程最多与一个控制台窗口关联。

你需要两个控制台窗口,然后你可以启动另一个进程并将输出管道输出到它,或通过套接字或Windows“邮件槽”或其他任何方式与它通信。