How to implement signal.wait(timeout)?

Hi all

I am writing a ruby server. Something like:

class MyServer

def initialize
@stop_signal = MySignal.new
end

def start
@stop_signal.reset
@thread = Thread.start { run }
end

def stop
@stop_signal.set
@thread.wait
end

def run

while true
do_process if there_is_some_thing_to_process
@stop_signal.wait 5
end

end

end

Is there any class in ruby that has similar functions to MySignal?
It’s easy solution in java or .net.

I have googled, and I found a method call ‘timeout’, but after read
the source code, I found it uses a new thread to handle timeout. I
think It’s not good solution, because on my real system (ported
from .net source code), there are some thread running parallel, and
there are using alot of signal.

Thanks
Jacob

On Tue, Sep 30, 2008 at 7:59 PM, Jacob [email protected] wrote:

I have googled, and I found a method call ‘timeout’, but after read
the source code, I found it uses a new thread to handle timeout. I
think It’s not good solution, because on my real system (ported
from .net source code), there are some thread running parallel, and
there are using alot of signal.

You will have to code carefully because ruby uses green threads, not
native threads so you can get blocked on system calls.

I had the same sort of problem, in the end, we solved it with the
terminator gem (1)

See the system timer (2) write up for a good explanation of what is
happening.

  1. http://www.lindsaar.net/2008/9/11/terminator-timeout-without-mercy
  2. http://ph7spot.com/articles/system_timer

Mikel

Also see the ALARM signal which allows a signal to be delivered after
some time has elapsed.