From: Robert Klemme Date: 2010-09-30T22:16:09+09:00 Subject: Re: Calling a method in the context of a specific thread On Thu, Sep 30, 2010 at 2:26 PM, Ralph Shnelvar wrote: > Robert, > > Thursday, September 30, 2010, 12:10:34 AM, you wrote: > > RK> On 09/29/2010 03:22 AM, Ralph Shnelvar wrote: >>> [Note:  parts of this message were removed to make it a legal post.] > >>> Background: > >>> I am writing an FXRuby program.  My question should be independent of FXRuby, though. > >>> FXRuby is a GUI for Ruby. > >>> If I understand some of the comments made here (and I probably don't) [see subject: interpreter cannot enter in the context from another thread] it is a bad thing to attempt to run an FXRuby function in a non-main thread. > > > > >>> So ... I have a non-main thread that wants to display a message box (i.e. "call" FXMessageBox"). > >>> How can I invoke FXMessageBox in the context of the main thread? > > > >>> I can think of all sorts of ugly solutions. > >>> For instance: > >>> 1) Set some global_variable indicating the task I want to perform in the main thread. >>> 2) Do a thread.stop >>> 3) have a timer in the main thread and have it dispatch based on global_variable >>> 4) save the return code of FXMessageBox in a thread local variable the not-main-thread >>> 5) Do a thread.run to wake up the stopped not-main-thread. > > RK> 6) Have a task queue which is read in the main thread.  You can even > RK> store lambdas in there. > > Please explain more; a lot more. > > I am particularly confused how a task queue would work given that nothing in the main thread can block since that would stop FXRuby's message pump. Actually I do not know RXRuby - I just answered based on the information in your posting. Maybe there is a queue in FXRuby that is regularly read from the main thread and which you can use. Actually you need to be able to interfere with FXRuby's processing otherwise I don't understand how you want to make option 1 work. Btw, a quick Google revealed this at the top of the list: http://www.fxruby.org/doc/differences.html#d0e5063 Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/