From: nobu.nokada@... Date: 2004-05-21T11:43:33+09:00 Subject: Re: signaling a ruby thread from a win32 native thread Hi, At Fri, 7 May 2004 03:55:54 +0900, Vincenzo Piombo wrote in [ruby-talk:99416]: > I am working at a ruby application that needs to be notified of some hw > event provided by third party driver/DLL. It should run on Win32. > The hardware events are generated in the context of a native win32 thread, > and I need to handle them in some ruby code. The main ruby process is > meanwhile used to handle a TCP/IP dialog with a GUI. > > So basically I need an event queue which a ruby thread can suspend on, > waiting for events pushed in the queue by a win32 native thread. > > I did some experiment with ruby API in a ruby extension but didn't succeed > to make it work. > Can you guys tell me whether I'm trying something plainly impossible (in > that case are there alternatives ?) or am I just making some implementation > error ? Current ruby interpreter implementation doesn't allow to be called from other native threads. A) You may be possible to use rb_w32_main_context(), which signals the main thread (native thread on which ruby runs), handshakes with it and invokes the given function in it. B) Once I wrote a patch to improve IO.select issue, which it also provides rb_w32_wait_for_handle() function. http://nokada.jin.gr.jp/ruby/win32/wait_events.diff Note that it absolutely is untested. -- Nobu Nakada