concurrent-sequential 0.1 → 0.2
Sign up to get free protection for your applications and to get access to all the features.
@@ -39,27 +39,33 @@ module Sequential
|
|
39
39
|
class ThreadSequencer
|
40
40
|
def initialize
|
41
41
|
@queue = Queue.new
|
42
|
-
@
|
42
|
+
@shutdown = false
|
43
43
|
@thread = Thread.new { run }
|
44
44
|
end
|
45
45
|
|
46
|
-
def
|
46
|
+
def later(&block)
|
47
47
|
raise ArgumentError, "No block given" unless block
|
48
48
|
@queue << block
|
49
49
|
self
|
50
50
|
end
|
51
51
|
|
52
52
|
def shutdown(timeout=nil)
|
53
|
-
|
53
|
+
later { @shutdown = true } if @thread.alive?
|
54
54
|
@thread.join(timeout)
|
55
55
|
self
|
56
56
|
end
|
57
57
|
|
58
58
|
def run
|
59
|
-
|
59
|
+
until @shutdown and @queue.empty?
|
60
60
|
begin
|
61
61
|
@queue.shift.call
|
62
|
-
rescue Exception
|
62
|
+
rescue Exception => e
|
63
|
+
if $DEBUG
|
64
|
+
$stderr.puts "Exception in sequencer loop:"
|
65
|
+
$stderr.puts "${e.class}: #{e}"
|
66
|
+
$stderr.puts e.backtrace
|
67
|
+
$stderr.puts "---"
|
68
|
+
end
|
63
69
|
end
|
64
70
|
end
|
65
71
|
self
|
@@ -7,21 +7,21 @@ describe mock_sequencer do
|
|
7
7
|
@sequencer = mock_sequencer.new
|
8
8
|
end
|
9
9
|
|
10
|
-
it "should accept blocks via #{mock_sequencer}#
|
11
|
-
@sequencer.
|
10
|
+
it "should accept blocks via #{mock_sequencer}#later" do
|
11
|
+
@sequencer.later { }
|
12
12
|
end
|
13
13
|
|
14
14
|
it "should execute submitted blocks after submission" do
|
15
15
|
calls = mock("calls")
|
16
|
-
@sequencer.
|
16
|
+
@sequencer.later { calls.a }
|
17
17
|
calls.should_receive(:a)
|
18
18
|
@sequencer.run
|
19
19
|
end
|
20
20
|
|
21
21
|
it "should execute reentrant blocks completely and in submission order" do
|
22
22
|
calls = mock("calls")
|
23
|
-
@sequencer.
|
24
|
-
@sequencer.
|
23
|
+
@sequencer.later do
|
24
|
+
@sequencer.later { calls.b }
|
25
25
|
calls.a
|
26
26
|
end
|
27
27
|
calls.should_receive(:a).ordered
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: concurrent-sequential
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: "0.
|
7
|
-
date: 2008-06-
|
6
|
+
version: "0.2"
|
7
|
+
date: 2008-06-07 00:00:00 -04:00
|
8
8
|
summary: Sequenced asynchronous actions
|
9
9
|
require_paths:
|
10
10
|
- lib
|