I am currently working on a console-based app, in which the user
interacts by entering commands from within a prompt (e.g. sort of a
bash-like app).
One thread for the prompt, some others for computation.
I allowed those threads to output to the console, but it leads to a
really not user-friendly behaviour. Example:
prompt: lis <- started to type in the “list” command
Blablabla from Thread1 <- output to $stdin by threads
prompt: <- The prompt is re-displayed, the command
“seems” lost
prompt: list <- Type again the command “list”
Error: lislist: Unknown command
See my problem?
How can I get the exact text line to be displayed after a thread output
its message? Or How can I catch a partially typed input?
I thought of syscalls, but didn’t get any results yet.
[Note: Obviously, if I had only input “t” after the thread had
displayed, my command would have been correctly interpreted]
Blablabla from Thread1 <- output to $stdin by threads
prompt: <- The prompt is re-displayed, the command
“seems” lost
prompt: list <- Type again the command “list”
Error: lislist: Unknown command
See my problem?
How can I get the exact text line to be displayed after a thread output
its message? Or How can I catch a partially typed input?
By not using threads. The order of input and output is not synchronized
between threads. BTW this is true for all thread uses, not just Ruby.
The
only way to get a reasonable match between input and output is for the I
and O of I/O to be in the same thread.
I am currently working on a console-based app, in which the user
interacts by entering commands from within a prompt (e.g. sort of a
bash-like app).
If you are working on a shell, you are welcome to help with rs[1]. If
you are just doing it for learning purposes or implementing a command-
line program, you can use HighLine[2]
In this problem, one should consider the output generated by the threads
is not context-sensitive (or command-sensitive). It is a monitoring app,
I do need to be informed of any event in realtime (by “outputting” to
the console) while not messing up my input (or messing it up the least
possible )
I hope I made myself a little clearer.
But I suppose you’re right. I’ll try building of a single-threaded-IO
based architecture. Thinking of it, maybe callback procedures may
help…
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.