Forum: Ruby Ruby, Curses, Threading, and Sleeping...

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
badcherry (Guest)
on 2007-02-21 04:45
(Received via mailing list)
I'm attempting to get a curses application running in a threaded
environment to handle input with no delay.  This is needed for
portability reasons.  I have found though that in a threaded ruby
environment that whenever there is a call to sleep (even in a
different thread) then Curses behaves differently.  The following code
acts as I expect it to:

require 'curses'
require 'pp'

ch = []

Curses::stdscr.nodelay = true

t = do
  x = 0

while c = Curses::stdscr.getch
  break if c == 9  #tab exits
  sleep 0.1
  Curses::addstr("               ")
  ch << [c]

pp ch

It works just fine and grabs input with out waiting for it and returns
an error value when there is no input.  If you change the line 'x = 0'
to 'sleep 1' then the behavior of Curses changes and the line c =
Curses::stdscr.getch will now sit idle until a key has been pressed.

Is there a better way of making threads idle other than sleep that
won't cause this side effect?  Is there a better way of grabbing input
that the way that I am using?

My stats:
Emachines M6805 (running in 32bit)
Ubuntu 6.10
Ruby 1.8.4
Barry Dmytro
Thomas Dickey (Guest)
on 2007-02-21 14:00
(Received via mailing list)
badcherry <removed_email_address@domain.invalid> wrote:
> I'm attempting to get a curses application running in a threaded

curses isn't thread-safe.
badcherry (Guest)
on 2007-02-22 07:25
(Received via mailing list)
Well yeah, I realize that, but anyone have any suggestions for making
this work?  It runs just fine on *nix systems done a different way,
but will then not run in windows do to how ruby threads behave in
windows.  I want this to run on both platforms.
This topic is locked and can not be replied to.