How to implement signal.wait(timeout) ?

J

Jacob

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
 
M

Mikel Lindsaar

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
 
R

Ron Fox

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

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,051
Latest member
CarleyMcCr

Latest Threads

Top