Calling a method in the context of a specific thread

R

Ralph Shnelvar

[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.


Ugly!
 
R

Robert Klemme

[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.

6) Have a task queue which is read in the main thread. You can even
store lambdas in there.

Cheers

robert
 
R

Ralph Shnelvar

[Note: parts of this message were removed to make it a legal post.]

Robert,

Thursday, September 30, 2010, 12:10:34 AM, you 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.
 
R

Robert Klemme

Robert,

Thursday, September 30, 2010, 12:10:34 AM, you wrote:

[Note: =A0parts of this message were removed to make it a legal post.]
Background:
I am writing an FXRuby program. =A0My 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] i=
t is a bad thing to attempt to run an FXRuby function in a non-main thread.
e. "call" FXMessageBox").


RK> 6) Have a task queue which is read in the main thread. =A0You can eve= n
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

--=20
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/
 

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,769
Messages
2,569,582
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top