[macruby-changes] [3695] MacRuby/trunk/lib/dispatch/README.rdoc
source_changes at macosforge.org
source_changes at macosforge.org
Thu Mar 4 09:59:38 PST 2010
Revision: 3695
http://trac.macosforge.org/projects/ruby/changeset/3695
Author: ernest.prabhakar at gmail.com
Date: 2010-03-04 09:59:38 -0800 (Thu, 04 Mar 2010)
Log Message:
-----------
Source.process
Modified Paths:
--------------
MacRuby/trunk/lib/dispatch/README.rdoc
Modified: MacRuby/trunk/lib/dispatch/README.rdoc
===================================================================
--- MacRuby/trunk/lib/dispatch/README.rdoc 2010-03-04 17:59:32 UTC (rev 3694)
+++ MacRuby/trunk/lib/dispatch/README.rdoc 2010-03-04 17:59:38 UTC (rev 3695)
@@ -111,7 +111,7 @@
puts job.values.class # => Dispatch::Proxy
-=== method_missing: Using Proxies
+=== Proxy#method_missing: Using Proxies
The Proxy object can be called just as it if were the delegate object:
@@ -131,7 +131,7 @@
@hash.inspect { |s| p s } # => {64 => 1.0E32, 100 => 1.0E50}
-=== \_\_value\_\_: Returning Delegate
+=== Proxy#\_\_value\_\_: Returning Delegate
If for any reason you need to retrieve the delegate object, simply call +__value__+:
@@ -262,10 +262,12 @@
timer = Source.periodic(0.9) { |src| puts src.data }
sleep 2 # => 1 1 ...
+
+If you're familiar with the C API for GCD, be aware that a +Dispatch::Source+ is fully configured at the time of instantiation, and does not need to be +resume+d.
=== Source#data
-As you can see above, the handler gets called with the source itself as a parameter, which allows you query it for the source's +data+. The meaning of the data varies with the type of +Source+, though it is always an integer. Most commonly -- as in this case -- it is a count of the number of events being processed, and thus "1".
+As you can see above, the handle gets called with the source itself as a parameter, which allows you query it for the source's +data+. The meaning of the data varies with the type of +Source+, though it is always an integer. Most commonly -- as in this case -- it is a count of the number of events being processed, and thus "1".
=== Source#suspend!
@@ -320,7 +322,7 @@
adder.resume! # => "add 8 -> 9"
adder.cancel!
-Since the source is suspended -- mimicking what would happen if your event handler was busy at the time -- GCD automatically _merges_ the results together using addition. This is useful for tracking cumulative results across multiple threads, e.g. for a progress viewer. Notice that this is also the same event coalescing behavior used by +periodic+.
+Since the source is suspended -- mimicking what would happen if your event handler was busy at the time -- GCD automatically _merges_ the results together using addition. This is useful for tracking cumulative results across multiple threads, e.g. for a parallel progress viewer. Notice that this is also the same event coalescing behavior used by +periodic+.
==== Source.or
@@ -350,25 +352,41 @@
fork::Dispatch::Source.PROC_FORK
signal::Dispatch::Source.PROC_SIGNAL
-The API primarily treats these as integers, e.g.:
+[WARNING: +Thread#fork+ is currently not supported by MacRuby]
- at src = Dispatch::Source.process($$, %w(exit fork exec signal),
+The API primarily treats these values as integers, e.g.:
- but the wrapper allows you to optinally specify them as symbols (or strings), and convert them bitfield into an array of symbols
+ @event = 0
+ mask = Dispatch::Source::PROC_EXIT | Dispatch::Source::PROC_SIGNAL
+ src = Dispatch::Source.process($$, mask) do |s|
+ @event |= s.data
+ end
+
+In this case, we are watching the current process for +signal+ and (less helpfully) +exit+ events .
+
+To fire the event, we can, e.g., send a signal [WARNING: Signals are only partially implemented in the current version of MacRuby, and may give erratic results]:
@signal = Signal.list["USR1"]
- @events = []
- @src = Dispatch::Source.process($$, %w(exit fork exec signal), @q) do
- |s| @events = Dispatch::Source.data2events(s.data)
- end
Signal.trap(@signal, "IGNORE")
Process.kill(@signal, $$)
Signal.trap(@signal, "DEFAULT")
- @q.sync {}
- @event.should.include? :signal > 0
+
+And you check for them by _and_ing against the flag:
+ puts "%b" % (@event & Dispatch::Source::PROC_SIGNAL) # => 1000000000000000000000000000
+==== Source#data2events
+
+Alternatively, you can pass in array of names (symbols or strings) for the mask, and use +data2events+ to convert the bitfield into an array of symbols
+
+ @signal = Signal.list["USR1"]
+ @events = []
+ @src = Dispatch::Source.process($$, %w(exit fork exec signal)) do |s|
+ |s| @events << Dispatch::Source.data2events(s.data)
+ end
+
+
==== Source.signal
This +add+-style event.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100304/3086a177/attachment.html>
More information about the macruby-changes
mailing list