ztimer 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6f141e0e904b09ba4e9479dfaa3a0ec47ed48ee3
4
- data.tar.gz: 6c3ecec2bac2dd388b4eee8154187f14836cae22
3
+ metadata.gz: 121c5eba1e94fd6be30153011569eda98500a497
4
+ data.tar.gz: 084133c7d9e7ab4dad366c21107d494aa452f20b
5
5
  SHA512:
6
- metadata.gz: cc01e57fc11a70e3927f5643f0c639654d75c6f1bcea8aa6a56ca3f185a22476177430e1cc3098020c129900b8b516c3760aebf52edbaf57b8e72149139abf66
7
- data.tar.gz: 017113396491866580b63ae0242ffbe2085427b1c55e2c45dfc0a5233f11b5f08e015c0e0006a931b39ac49536e564d72018ef148ca3594a78c37c7181f3521f
6
+ metadata.gz: 878684872b565c899f5963970fad9604057f769864f1ffee747612a471d7b2029081463b66c8d0c9ad3c668409056c64853b60e03c974b4dd108ae198d7b87f0
7
+ data.tar.gz: 5fe4d73a56bf09c3ea73d6be5c0eed9620a19509f5914f79b1624ec658ee882c5c24882b2b4dd130182e9d8056b9d881454222fc6b7a279cab2ad33f5de2ff48
@@ -1,3 +1,3 @@
1
1
  module Ztimer
2
- VERSION = "0.4.0"
2
+ VERSION = "0.4.1"
3
3
  end
@@ -4,11 +4,9 @@ module Ztimer
4
4
 
5
5
  def initialize(&callback)
6
6
  @thread = nil
7
- @idler = Lounger.new
8
7
  @slots = Ztimer::SortedStore.new
9
8
  @callback = callback
10
9
  @lock = Mutex.new
11
- @metric = Hitimes::Metric.new("Notifier")
12
10
  @mutex = Mutex.new
13
11
  end
14
12
 
@@ -29,7 +27,8 @@ module Ztimer
29
27
 
30
28
  def run
31
29
  if @thread
32
- @idler.signal && @thread.run
30
+ @thread.wakeup
31
+ @thread.run
33
32
  else
34
33
  start
35
34
  end
@@ -40,15 +39,19 @@ module Ztimer
40
39
  return if @thread
41
40
  @thread = Thread.new do
42
41
  loop do
43
- delay = get_delay
44
- if delay.nil?
45
- @idler.wait
46
- next
47
- end
42
+ begin
43
+ delay = get_delay
44
+ if delay.nil?
45
+ Thread.stop
46
+ next
47
+ end
48
48
 
49
- select(nil, nil, nil, delay / 1_000_000.to_f) if delay > 1 # 1 microsecond of cranularity
49
+ select(nil, nil, nil, delay / 1_000_000.to_f) if delay > 1 # 1 microsecond of cranularity
50
50
 
51
- while get_first_expired do
51
+ while get_first_expired do
52
+ end
53
+ rescue => e
54
+ puts e.inspect + "\n" + e.backtrace.join("\n")
52
55
  end
53
56
  end
54
57
  end
@@ -57,15 +60,15 @@ module Ztimer
57
60
  end
58
61
 
59
62
  def get_delay
60
- return @mutex.synchronize { @slots.empty? ? nil : @slots.first.expires_at - @metric.utc_microseconds }
63
+ return @mutex.synchronize { @slots.empty? ? nil : @slots.first.expires_at - utc_microseconds }
61
64
  end
62
65
 
63
66
  def get_first_expired
64
67
  @mutex.synchronize do
65
68
  slot = @slots.first
66
- if slot && (slot.expires_at < @metric.utc_microseconds)
69
+ if slot && (slot.expires_at < utc_microseconds)
67
70
  @slots.shift
68
- slot.started_at = @metric.utc_microseconds
71
+ slot.started_at = utc_microseconds
69
72
  unless slot.canceled?
70
73
  execute(slot)
71
74
  if slot.recurrent?
@@ -84,5 +87,9 @@ module Ztimer
84
87
  def execute(slot)
85
88
  @callback.call(slot)
86
89
  end
90
+
91
+ def utc_microseconds
92
+ return Time.now.to_f * 1_000_000
93
+ end
87
94
  end
88
95
  end
data/lib/ztimer.rb CHANGED
@@ -1,7 +1,3 @@
1
- require 'set'
2
- require 'hitimes'
3
- require 'lounger'
4
-
5
1
  require "ztimer/version"
6
2
  require "ztimer/slot"
7
3
  require "ztimer/sorted_store"
@@ -10,7 +6,6 @@ require "ztimer/watcher"
10
6
  module Ztimer
11
7
  @concurrency = 20
12
8
  @watcher = Ztimer::Watcher.new(){|slot| execute(slot) }
13
- @metric = Hitimes::Metric.new("Notifier")
14
9
  @workers_lock = Mutex.new
15
10
  @queue = Queue.new
16
11
  @running = 0
@@ -20,7 +15,7 @@ module Ztimer
20
15
  attr_reader :concurrency, :running, :count
21
16
 
22
17
  def after(milliseconds, &callback)
23
- enqueued_at = @metric.utc_microseconds
18
+ enqueued_at = utc_microseconds
24
19
  expires_at = enqueued_at + milliseconds * 1000
25
20
  slot = Slot.new(enqueued_at, expires_at, -1, &callback)
26
21
 
@@ -65,7 +60,7 @@ module Ztimer
65
60
  worker = Thread.new do
66
61
  begin
67
62
  while !@queue.empty? && @queue.pop(true) do
68
- slot.executed_at = @metric.utc_microseconds
63
+ slot.executed_at = utc_microseconds
69
64
  slot.callback.call(slot) unless slot.callback.nil?
70
65
  end
71
66
  rescue ThreadError
@@ -80,5 +75,9 @@ module Ztimer
80
75
  end
81
76
  end
82
77
  end
78
+
79
+ def utc_microseconds
80
+ return Time.now.to_f * 1_000_000
81
+ end
83
82
  end
84
83
  end
data/ztimer.gemspec CHANGED
@@ -22,6 +22,4 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency "bundler", "~> 1.11"
23
23
  spec.add_development_dependency "rake", "~> 10.0"
24
24
  spec.add_development_dependency "rspec", "~> 3.0"
25
- spec.add_dependency "hitimes", "~> 1.2"
26
- spec.add_dependency "lounger", "~> 0.2"
27
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ztimer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Groza Sergiu
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-03-24 00:00:00.000000000 Z
11
+ date: 2016-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,34 +52,6 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
- - !ruby/object:Gem::Dependency
56
- name: hitimes
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '1.2'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '1.2'
69
- - !ruby/object:Gem::Dependency
70
- name: lounger
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '0.2'
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '0.2'
83
55
  description: Ruby asyncrhonous timer that allows you to enqueue tasks to be executed
84
56
  asyncrhonously after a delay
85
57
  email:
@@ -123,8 +95,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
95
  version: '0'
124
96
  requirements: []
125
97
  rubyforge_project:
126
- rubygems_version: 2.4.8
98
+ rubygems_version: 2.4.6
127
99
  signing_key:
128
100
  specification_version: 4
129
101
  summary: An asyncrhonous timer
130
102
  test_files: []
103
+ has_rdoc: