3

入力が行われる前に文字列を出力する関数を探しています。printfとでこれが可能であることはわかっていgetsますが、文字列を入力が与えられた最後の行にとどめたいと思います。出力はメイン スレッドで処理され、入力はメイン スレッドによって開始された別のスレッドで処理されます。

たとえば、これは現在のコンソール ウィンドウです ( stop-command を入力しました。「>」はプレフィックス文字列です)。

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

コンソールが新しい行を出力するとき、次のように入力が常に一番下の行になるようにします。

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

Win32 と VCL をサポートする Embarcadero C++Builder XE2 を使用しています。

編集:私は現在このコードを使用しているため、「>」プレフィックスの後に出力が出力されます:

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

2 に答える 2

4

あなたが探しているのは、非同期入出力と呼ばれるものです。

これを達成するために私がしたことは、押された各キーを追跡し、それを文字列に追加することです。

バックスペースを押すと、文字列に追加された最後の文字が削除され、Enter を押すと現在のコマンドが送信されます。

出力が来たら、入力していた行をクリアし、出力を印刷してから、カーソルを下に移動して、文字列に保存したものを印刷します。

必要に応じて、スレッド化を少し行う必要がありますが、あまり労力をかけずにそのほとんどを達成できたと確信しています。

その他の可能なリソース:

于 2013-05-09T16:13:16.993 に答える
0

最後の行を除くコンソールのすべての行をスクロールしてから、最後の行の前の行にメッセージを出力してみてください (ScrollConsoleScreenBuffer のようなものが役に立ちます)。このようにして、入力行は常にその場所にあります。

于 2013-05-09T16:06:04.433 に答える