[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

$stdin.gets, threads, and command-line app.

Xav Xav

10/23/2006 2:22:00 PM

Hi,

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]


--
Posted via http://www.ruby-....

4 Answers

Mark

10/23/2006 3:30:00 PM

0

I think your problem is the same as the one I posted a few hours ago.

Please look for subject "Trouble using puts and getc in different threads".

Mark

On 10/23/06, Xav Xav <xcambar@gmail.com> wrote:
> Hi,
>
> 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]
>
>
> --
> Posted via http://www.ruby-....
>
>

Paul Lutus

10/23/2006 4:07:00 PM

0

Xav Xav wrote:

> Hi,
>
> 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?

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.

--
Paul Lutus
http://www.ara...

Xav Xav

10/23/2006 4:43:00 PM

0

Paul Lutus wrote:
> By not using threads.

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...

--
Posted via http://www.ruby-....

Eero Saynatkari

10/24/2006 3:50:00 AM

0

On 2006.10.23 23:21, Xav Xav wrote:
> Hi,
>
> 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]

[1] http://projects.kittensoft.org/rs/rdoc/...
[2] http://highline.rub...