Re: [MacRuby] #572: ConditionVariable#wait should accept a timeout argument
#572: ConditionVariable#wait should accept a timeout argument ---------------------------------+------------------------------------------ Reporter: honglilai@… | Owner: lsansonetti@… Type: defect | Status: new Priority: blocker | Milestone: Component: MacRuby | Keywords: ---------------------------------+------------------------------------------ Comment(by isaackearse@…): Looks like ruby-core have rejected this change a month ago. Below are the reasons given, for more info see the thread on rubymine: http://redmine .ruby-lang.org/issues/show/2629 Hi, Hongli Even if there is no return value, you can detect the timeout *without guessing* by the following: {{{ mutex.synchronize do t = Time.now + x until @quit t2 = Time.now cv.wait(mutex, t - t2) if t > t2 break if @quit if Time.now > t t += x # cleanup code end end # stop the loop end }}} I recommend this code because it is robust against spurious wakeup. I think the feature you requested can be used to make the code more efficient, like the following: {{{ mutex.synchronize do t = Time.now + x until @quit t2 = Time.now timeout = t <= t2 || cv.wait(mutex, t - t2) break if @quit # (A) if timeout t += x # cleanup code end end # stop the loop end }}} But, the feature is not mandatory, and is even prone to misuse (the check (A) is very easy to forget). In addition, Tanaka Akira, who has added the timeout feature to CV#wait, rejected the feature. Consequently, I close this ticket. Sorry for decision against your exception, and also sorry for not deciding sooner. -- Yusuke Endoh <mame@tsg.ne.jp> -- Ticket URL: <http://www.macruby.org/trac/ticket/572#comment:3> MacRuby <http://macruby.org/>
participants (1)
-
MacRuby