在使用readline(阻塞)進行用戶輸入時,我想從另一個線程異步輸出文本行到控制檯。此外,我希望從控制檯中刪除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」 慢慢鍵入)
tick
tick
tick
tick
tick
? foo
tick
tick
tick
tick
tick
? bar
tick
? ^C
你已經嘗試了什麼? ;-) – alk 2012-03-04 10:35:08