Class: TaskQueue
- Inherits:
-
Object
- Object
- TaskQueue
- Defined in:
- lib/avertasks/taskqueue.rb
Defined Under Namespace
Classes: ArgumentErr, TaskRunErr
Constant Summary collapse
- @@errMsg =
[ 'ArgumentErr for func:{func} argument type: {type} is requirement' ]
- @@run_times =
0
Instance Attribute Summary collapse
-
#cankill ⇒ Object
Returns the value of attribute cankill.
-
#completed ⇒ Object
readonly
Returns the value of attribute completed.
-
#full_count ⇒ Object
Returns the value of attribute full_count.
-
#id ⇒ Object
readonly
Returns the value of attribute id.
-
#runing ⇒ Object
(also: #runing?)
readonly
Returns the value of attribute runing.
-
#tasks ⇒ Object
readonly
Returns the value of attribute tasks.
-
#waiting ⇒ Object
(also: #waiting?)
readonly
Returns the value of attribute waiting.
Class Method Summary collapse
Instance Method Summary collapse
- #hungry? ⇒ Boolean
-
#initialize(id, full_count) ⇒ TaskQueue
constructor
A new instance of TaskQueue.
- #none? ⇒ Boolean
- #push(task) ⇒ Object
-
#run ⇒ Object
@waiting,@runing now is useless…
- #start ⇒ Object
Constructor Details
#initialize(id, full_count) ⇒ TaskQueue
Returns a new instance of TaskQueue.
20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/avertasks/taskqueue.rb', line 20 def initialize(id, full_count) # define for collect tasks @tasks = [] @id = id @completed = 0 @runing = false @waiting = true @task_mutex = Mutex.new @full_count = full_count @cankill = false @alldo = false end |
Instance Attribute Details
#cankill ⇒ Object
Returns the value of attribute cankill.
9 10 11 |
# File 'lib/avertasks/taskqueue.rb', line 9 def cankill @cankill end |
#completed ⇒ Object (readonly)
Returns the value of attribute completed.
5 6 7 |
# File 'lib/avertasks/taskqueue.rb', line 5 def completed @completed end |
#full_count ⇒ Object
Returns the value of attribute full_count.
8 9 10 |
# File 'lib/avertasks/taskqueue.rb', line 8 def full_count @full_count end |
#id ⇒ Object (readonly)
Returns the value of attribute id.
4 5 6 |
# File 'lib/avertasks/taskqueue.rb', line 4 def id @id end |
#runing ⇒ Object (readonly) Also known as: runing?
Returns the value of attribute runing.
6 7 8 |
# File 'lib/avertasks/taskqueue.rb', line 6 def runing @runing end |
#tasks ⇒ Object (readonly)
Returns the value of attribute tasks.
3 4 5 |
# File 'lib/avertasks/taskqueue.rb', line 3 def tasks @tasks end |
#waiting ⇒ Object (readonly) Also known as: waiting?
Returns the value of attribute waiting.
7 8 9 |
# File 'lib/avertasks/taskqueue.rb', line 7 def waiting @waiting end |
Class Method Details
.run_times ⇒ Object
81 82 83 |
# File 'lib/avertasks/taskqueue.rb', line 81 def run_times() return @@run_times end |
Instance Method Details
#hungry? ⇒ Boolean
59 60 61 62 63 64 65 66 |
# File 'lib/avertasks/taskqueue.rb', line 59 def hungry?() count = 0 @task_mutex.synchronize do count = full_count - @tasks.size end return 0 if count <= 0 return count end |
#none? ⇒ Boolean
67 68 69 70 71 |
# File 'lib/avertasks/taskqueue.rb', line 67 def none? @task_mutex.synchronize do @tasks.none? end end |
#push(task) ⇒ Object
32 33 34 35 36 |
# File 'lib/avertasks/taskqueue.rb', line 32 def push(task) raise ArgumentErr.new(TaskQueue.errMsg[0].sub(/{func}/, 'TaskQueue.push').sub(/{type}/, 'Task')) unless task.instance_of? Task @task_mutex.synchronize { @tasks << task } self end |
#run ⇒ Object
@waiting,@runing now is useless…
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/avertasks/taskqueue.rb', line 38 def run() @task_mutex.synchronize do if @tasks.none? then @waiting = true @runing = false @alldo = true return false else @waiting = false @runing = true @alldo = false # temp variable for this func @current_task = @tasks.pop end end # note that i have drop out the result of your proc @current_task.run if @current_task @completed += 1 @@run_times += 1 return true end |
#start ⇒ Object
72 73 74 75 76 77 78 79 |
# File 'lib/avertasks/taskqueue.rb', line 72 def start() thr = Thread.new do while (!cankill || !@alldo) do Thread.pass unless self.run end end return thr end |