前缀后的异步输入和输出/获取输入

时间:2013-05-09 15:59:11

标签: c++ windows input console c++builder

我正在搜索一个在输入之前打印字符串的函数。我知道printfgets可以实现这一点,但我希望字符串保留在给出输入的最后一行。输出在主线程中处理,输入在主线程启动的另一个线程中处理。

例如,这是当前的控制台窗口(我输入了stop - 命令,'>'是前缀字符串):

[12:00:00] Starting server...
>stop

当控制台输出一个新行时,我希望输入始终位于底线,如下所示:

[12:00:00] Starting server...
[12:00:01] Server started
>stop

我正在使用Embarcadero C ++ Builder XE2,支持Win32和VCL。

编辑:我目前正在使用此代码,导致在'>'之后打印输出前缀:

char buf[256];
printf(">");
gets(buf);

2 个答案:

答案 0 :(得分:4)

您正在寻找的是异步输入/输出。

我要做的就是跟踪每个被按下的键并将其附加到字符串中。

当您按退格键时,它会删除添加到字符串中的最后一个字符,当您按Enter键时,它将提交当前命令。

当输出出现时,清除您输入的行,打印输出,然后向下移动光标并打印出您在字符串中保存的内容。

如果你愿意,你必须做一些线程工作,但我很确定我能够毫不费力地完成大部分工作。

其他可能的资源:

答案 1 :(得分:0)

尝试滚动除最后一行之外的所有控制台行,然后将消息打印到最后一行之前(ScrollConsoleScreenBuffer会帮助你)。这样输入线将始终位于其位置。