出力メッセージを表示、私は別のスレッドからの非同期コンソールにテキストの出力ラインにたいです。さらに、私は、出力ラインが書き込まれた後、readlineプロンプトと部分的なユーザラインが復元され、出力が "上に"書かれたように見えるように、プロンプト。 readlineの再表示機能(またはその他)のどんな組み合わせによってGNU Readlineの(libreadline):ユーザ入力のためのreadline(ブロッキング)を使用しているが、非同期
はこれを達成することができますか?
(再表示機能ドキュメント:http://cnswww.cns.cwru.edu/php/chet/readline/readline.html#SEC35)
問題のデモ:
#include <readline/readline.h>
#include <readline/history.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
bool run = true;
void* log_thread(void*)
{
while (run)
{
sleep(1);
// WHAT TO DO HERE?
write(1, "tick\n", 5);
}
}
int main()
{
pthread_t t;
pthread_create(&t, 0, log_thread, 0);
while (true)
{
char* p = readline("? ");
free(p);
if (!p)
break;
}
run = false;
pthread_join(t,0);
}
ビルド:
$ g++ -pthread -lreadline test.cpp
$ ./a.out
観測出力:(入力「FOO \ NBAR \ n "はゆっくりと入力する)
? tick
ftick
otick
otick
? tick
tick
bartick
tick
? tick
^C
所望の出力:(ゆっくりと型指定された入力 "\ NBAR \ n個のfoo")
tick
tick
tick
tick
tick
? foo
tick
tick
tick
tick
tick
? bar
tick
? ^C
あなたはすでに何を試しましたか? ;-) – alk