Hi, The last couple of days I''ve been trying to get back on the wxRuby-horse however I''ve ran into some problems while compiling/testing the subversion sources. Mind, the 1.9.2 official release works fine. Absolutely no problems whatsoever. The first hurdle was that the rake install target doesn''t work. It fails on rakewx.rb:145. Looking into it I found that $target_lib wasn''t set to anything. Searching the sources I couldn''t find where it is supposed to be set. Still the rake gem command works fine so I installed the newly created gem. However when trying to run the minimal sample (only one I tried) it segfaults. After recompiling both wxGTK and wxRuby with debug enabled I decided to run it through gdb. I couldn''t find anything, it''s just a wee bit too complex for me to handle right now. Don''t think this is useful for the developers but just in case it might be this is the error I got: undefined symbol: _Z10wxOnAssertPKwiPKcS0_S0_ I am running wxGTK-2.8.6, Ruby 1.8.6, RubyGems 0.9.4 and the wxruby subversion archive is up-to-date (rev 1450). I compiled wxGTK with the following configure command: ./configure --disable-shared --with-gtk --enable-monolithic \ --enable-unicode --enable-debug --enable-catch_segvs --enable-graphics_ctx \ --enable-mediactrl --with-opengl --with-libjpeg=builtin --with-libpng=builtin \ --with-libtiff=builtin --with-zlib=builtin --with-expat=builtin --enable-gui \ --enable-xrc --enable-mdi --enable-gif \ --enable-pcx --enable-iff --enable-pnm --enable-xpm With kind regards, Jonathan Maasland
Hi Jonathan Thanks for the reports, sorry to be slow in following up. Jonathan Maasland wrote:> The first hurdle was that the rake install target doesn''t work. It fails > on rakewx.rb:145. Looking into it I found that $target_lib wasn''t set to > anything. Searching the sources I couldn''t find where it is supposed to > be set. >Should now be fixed in SVN. With most people using gems, we''ve kind of slipped on maintenance of the tar.gz/install route, so please do report any probs.> I couldn''t find anything, it''s just a wee bit too complex for me to > handle right now. Don''t think this is useful for the developers but just > in case it might be this is the error I got: undefined symbol: > _Z10wxOnAssertPKwiPKcS0_S0_ >Hmm, I think I''ve seen that error if I''ve mistakenly compiled a debug wxRuby against a release wxWidgets, or vice versa. I think all the object files in wxRuby need to have been compiled with the "WXRUBY_DEBUG" environment variable set. The configuration for wxWidgets looks appropriate for this. cheers alex
Hello Jonathan, I''ve ran into the same problem myself, compiling from SVN on Linux, using wxGTK, and Ruby 1.8.6. I was able to get wxRuby and wxGTK to compile with Debug support, and from what I can see, running through gdb (Which was a trick and a half), it shows that it''s segfaulting on rb_hash_aref(), which is comming from /usr/lib/libruby.so.1.8 So I have a couple of questions for you. 1.) Which Distro are you using? 2.) Did you install Ruby from Source, or from your Distro''s Package Manager? 3.) Do you have the same problems if you take out the --with-opengl? These are just a few questions / ideas to get an idea of where the problem lies. L8ers, Mario Steele On 12/8/07, Alex Fenton <alex at pressure.to> wrote:> > Hi Jonathan > > Thanks for the reports, sorry to be slow in following up. > > Jonathan Maasland wrote: > > The first hurdle was that the rake install target doesn''t work. It fails > > on rakewx.rb:145. Looking into it I found that $target_lib wasn''t set to > > anything. Searching the sources I couldn''t find where it is supposed to > > be set. > > > Should now be fixed in SVN. With most people using gems, we''ve kind of > slipped on maintenance of the tar.gz/install route, so please do report > any probs. > > I couldn''t find anything, it''s just a wee bit too complex for me to > > handle right now. Don''t think this is useful for the developers but just > > in case it might be this is the error I got: undefined symbol: > > _Z10wxOnAssertPKwiPKcS0_S0_ > > > Hmm, I think I''ve seen that error if I''ve mistakenly compiled a debug > wxRuby against a release wxWidgets, or vice versa. I think all the > object files in wxRuby need to have been compiled with the > "WXRUBY_DEBUG" environment variable set. > > The configuration for wxWidgets looks appropriate for this. > > cheers > alex > _______________________________________________ > wxruby-users mailing list > wxruby-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/wxruby-users >-------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/wxruby-users/attachments/20071210/5902ec4b/attachment.html
Eric Rubin
2007-Dec-12 15:45 UTC
[wxruby-users] Question about running other threads in a WxRuby app
I''ve put together a GUI with WxRuby that works fine (under Windows XP). Now I''m adding another component, a UDP server, which runs in a separate thread. What I''m seeing is that the UDP server runs for a little while when I do something in the GUI, but then stops processing UDP packets until I do something else on the GUI. My UDP server thread spends most of its time waiting for a UDP packet, so it should be able to run at a high priority without interfering with the GUI operation. So what do I need to know about the interaction between WxRuby and other Ruby threads? Does WxRuby have threads running to implement GUI events? Are there known problems with running other threads in a WxRuby app? Thanks, Eric Rubin -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/wxruby-users/attachments/20071212/a03e85ce/attachment.html
Alex Fenton
2007-Dec-12 16:05 UTC
[wxruby-users] Question about running other threads in a WxRuby app
Hi Eric Eric Rubin wrote:> > I?ve put together a GUI with WxRuby that works fine (under Windows > XP). Now I?m adding another component, a UDP server, which runs in a > separate thread. What I?m seeing is that the UDP server runs for a > little while when I do something in the GUI, but then stops processing > UDP packets until I do something else on the GUI. My UDP server thread > spends most of its time waiting for a UDP packet, so it should be able > to run at a high priority without interfering with the GUI operation. > > So what do I need to know about the interaction between WxRuby and > other Ruby threads? Does WxRuby have threads running to implement GUI > events? Are there known problems with running other threads in a > WxRuby app? >As with other GUI toolkits, wxRuby doesn''t play so well with Ruby 1.8''s lightweight threads. The main GUI event loop runs constantly, and when it''s in there (in C-based code) Ruby''s thread scheduler won''t switch execution to subsidiary threads. Fortunately, it''s not hard to work around by using a Wx::Timer to schedule switches of Ruby''s thread execution. The recommended workaround is described here: http://rubyforge.org/pipermail/wxruby-users/2007-April/003055.html You will probably want to tweak the parameter to Timer#start to get the best responsiveness off your UDP server whilst still keeping the GUI reactive. hth alex
Mario Steele
2007-Dec-12 17:28 UTC
[wxruby-users] Question about running other threads in a WxRuby app
Hello Eric, As pointed out by Alex, it is a bit of a side trip to get things to work properly for wxRuby, with Ruby''s Soft-Threading control. As mentioned above, Timer + Thread.pass is the best method in which to do this. You should be able to find in the SVN an example of a wxRuby program utilizing Sockets within Threads, that I created myself. http://wxruby.rubyforge.org/svn/trunk/wxruby2/samples/sockets/ is the url to the svn lookup, and you should look at wxServer.rb. This is geared for Connection Based sockets, not Connectionless Sockets like what your Implementing. I would actually like to look at your code, once you''ve implemented the Timer + Thread.pass, to get an Idea of how UDP Sockets would work with the method, so that I can further investigate creating a library that will do this for us. Thanks, Mario Steele On 12/12/07, Alex Fenton <alex at pressure.to> wrote:> > Hi Eric > > Eric Rubin wrote: > > > > I''ve put together a GUI with WxRuby that works fine (under Windows > > XP). Now I''m adding another component, a UDP server, which runs in a > > separate thread. What I''m seeing is that the UDP server runs for a > > little while when I do something in the GUI, but then stops processing > > UDP packets until I do something else on the GUI. My UDP server thread > > spends most of its time waiting for a UDP packet, so it should be able > > to run at a high priority without interfering with the GUI operation. > > > > So what do I need to know about the interaction between WxRuby and > > other Ruby threads? Does WxRuby have threads running to implement GUI > > events? Are there known problems with running other threads in a > > WxRuby app? > > > > As with other GUI toolkits, wxRuby doesn''t play so well with Ruby 1.8''s > lightweight threads. The main GUI event loop runs constantly, and when > it''s in there (in C-based code) Ruby''s thread scheduler won''t switch > execution to subsidiary threads. > > Fortunately, it''s not hard to work around by using a Wx::Timer to > schedule switches of Ruby''s thread execution. The recommended workaround > is described here: > > http://rubyforge.org/pipermail/wxruby-users/2007-April/003055.html > > You will probably want to tweak the parameter to Timer#start to get the > best responsiveness off your UDP server whilst still keeping the GUI > reactive. > > hth > alex > > _______________________________________________ > wxruby-users mailing list > wxruby-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/wxruby-users >-------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/wxruby-users/attachments/20071212/4c56b814/attachment-0001.html
Eric Rubin
2007-Dec-13 15:05 UTC
[wxruby-users] Question about running other threads in a WxRubyapp
Alex''s fix did the trick. Thanks. Here''s the relevant part of my code. The UDP server, VIP102Comm, has to receive on a multicast address. I found some code for this online, but had to make a couple of changes to get it to run under Windows. One is that Socket::IP_ADD_MEMBERSHIP is not defined in Windows. Also in Windows the setsockopt call has to come after the bind call. (It the code I copied it came before and produced an error.) There also seems to be a problem with recvfrom. (Don''t know if it''s only in Windows.) When I used recvfrom it worked, but each recvfrom call took about 5 seconds. The problem went away when I switched to recv (but now I can''t get the source IP address). Eric require "soft_phone_frame" require "vip102comm" class SoftPhoneApp < App def on_init tmr = Wx::Timer.new(self, 55) evt_timer(55) { Thread.pass } tmr.start(100) frame = SoftPhoneFrame.new() Thread.new { VIP102Comm.new(frame) } end end SoftPhoneApp.new.main_loop class VIP102Comm def initialize(parent) Thread.current.priority = 100 @parent = parent # soft_phone_frame @control_addr = "239.1.1.2" @control_port = 4097 begin ip = IPAddr.new(@control_addr).hton + IPAddr.new("0.0.0.0").hton @sock = UDPSocket.new @sock.bind(Socket::INADDR_ANY, @control_port) # in Windows setsockopt must follow bind if Socket::const_defined?(''IP_ADD_MEMBERSHIP'') @sock.setsockopt(Socket::IPPROTO_IP, Socket::IP_ADD_MEMBERSHIP, ip) else # workaround for Ruby bug where Socket::IP_ADD_MEMBERSHIP is not defined in Windows @sock.setsockopt(Socket::IPPROTO_IP, 12, ip) end rescue ArgumentError => a puts "Argument error: " + a rescue Exception => e puts "error: " + e end loop do packet = @sock.recv(1350) # packet, sender = @sock.recvfrom(1350) # srcIPAddr = sender[3] process_packet(packet) end end -----Original Message----- From: wxruby-users-bounces at rubyforge.org [mailto:wxruby-users-bounces at rubyforge.org] On Behalf Of Mario Steele Sent: Wednesday, December 12, 2007 12:28 PM To: General discussion of wxRuby Subject: Re: [wxruby-users] Question about running other threads in a WxRubyapp Hello Eric, As pointed out by Alex, it is a bit of a side trip to get things to work properly for wxRuby, with Ruby''s Soft-Threading control. As mentioned above, Timer + Thread.pass is the best method in which to do this. You should be able to find in the SVN an example of a wxRuby program utilizing Sockets within Threads, that I created myself. http://wxruby.rubyforge.org/svn/trunk/wxruby2/samples/sockets/ is the url to the svn lookup, and you should look at wxServer.rb. This is geared for Connection Based sockets, not Connectionless Sockets like what your Implementing. I would actually like to look at your code, once you''ve implemented the Timer + Thread.pass, to get an Idea of how UDP Sockets would work with the method, so that I can further investigate creating a library that will do this for us. Thanks, Mario Steele On 12/12/07, Alex Fenton <alex at pressure.to> wrote: Hi Eric Eric Rubin wrote:> > I''ve put together a GUI with WxRuby that works fine (under Windows > XP). Now I''m adding another component, a UDP server, which runs in a > separate thread. What I''m seeing is that the UDP server runs for a > little while when I do something in the GUI, but then stops processing > UDP packets until I do something else on the GUI. My UDP server thread > spends most of its time waiting for a UDP packet, so it should be able > to run at a high priority without interfering with the GUI operation. > > So what do I need to know about the interaction between WxRuby and > other Ruby threads? Does WxRuby have threads running to implement GUI > events? Are there known problems with running other threads in a > WxRuby app? >As with other GUI toolkits, wxRuby doesn''t play so well with Ruby 1.8''s lightweight threads. The main GUI event loop runs constantly, and when it''s in there (in C-based code) Ruby''s thread scheduler won''t switch execution to subsidiary threads. Fortunately, it''s not hard to work around by using a Wx::Timer to schedule switches of Ruby''s thread execution. The recommended workaround is described here: http://rubyforge.org/pipermail/wxruby-users/2007-April/003055.html You will probably want to tweak the parameter to Timer#start to get the best responsiveness off your UDP server whilst still keeping the GUI reactive. hth alex _______________________________________________ wxruby-users mailing list wxruby-users at rubyforge.org http://rubyforge.org/mailman/listinfo/wxruby-users -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/wxruby-users/attachments/20071213/9e4f29f5/attachment.html