Module: Ruiby_threader
Overview
Creative Commons BY-SA : Regis d’Aubarede <[email protected]> LGPL
Instance Method Summary collapse
-
#after(n, &blk) ⇒ Object
as anim, but one shot, after some millisecs no threading: the bloc is evaluated by gtk mainloop in main thread context.
- #anim(n, &blk) ⇒ Object
-
#init_threader ⇒ Object
implictly called by Ruiby window creator initialize multi thread engine.
-
#on_idle(&blk) ⇒ Object
shot peridicly a bloc parameter no threading: the bloc is evaluated by gtk mainloop in main thread context return handle of animation.
-
#threader(per) ⇒ Object
must be created by application (in initialize, after super), active the tread engine for caller window.
Instance Method Details
#after(n, &blk) ⇒ Object
as anim, but one shot, after some millisecs no threading: the bloc is evaluated by gtk mainloop in main thread context
81 82 83 84 85 86 |
# File 'lib/ruiby_gtk/ruiby_threader.rb', line 81 def after(n,&blk) GLib::Timeout.add(n) { blk.call rescue log("#{$!} :\n #{$!.backtrace[0..3].join("\n ")}") false } end |
#anim(n, &blk) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/ruiby_gtk/ruiby_threader.rb', line 60 def anim(n,&blk) @hTimer||={} $on=false px=0 px=GLib::Timeout.add(n) do unless $on $on=true blk.call rescue log("#{$!} :\n #{$!.backtrace.join("\n ")}") $on=false else p "pass" end ret=@hTimer[px] @hTimer.delete(px) unless ret ret end @hTimer[px]=true px end |
#init_threader ⇒ Object
implictly called by Ruiby window creator initialize multi thread engine
7 8 9 10 11 12 13 14 15 |
# File 'lib/ruiby_gtk/ruiby_threader.rb', line 7 def init_threader unless defined?($__mainthread__) $__mainthread__= Thread.current $__mainwindow__=self @is_main_window=true else @is_main_window=false end end |
#on_idle(&blk) ⇒ Object
shot peridicly a bloc parameter no threading: the bloc is evaluated by gtk mainloop in main thread context return handle of animation. can be stoped by delete(anim) // NOT WORK!, return a Numeric…
46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/ruiby_gtk/ruiby_threader.rb', line 46 def on_idle(&blk) ii=0 px=GLib::Idle.add() do begin blk.call(ii) ii=(ii+1)%1000_000 true rescue Exception => e $on_idle_ok=false log("#{$!} :\n #{$!.backtrace.join("\n ")}") false end end end |
#threader(per) ⇒ Object
must be created by application (in initialize, after super), active the tread engine for caller window. if several windows, last created is the winner : gtk_invoke will throw to last treaded() window!
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/ruiby_gtk/ruiby_threader.rb', line 19 def threader(per) return unless $__mainwindow__==self @queue=Queue.new $__queue__=@queue ici=self GLib::Timeout.add(per) { now=Time.now while @queue.size>0 mess= @queue.pop if Array===mess win,mess=*mess else win=ici end win.instance_eval(&mess) rescue log("#{$!} :\n #{$!.backtrace[0..3].join("\n ")}") if (Time.now.to_f-now.to_f)>1 win.update now=Time.now end end true } end |