#!/usr/bin/env ruby
class Task
attr_reader :delay, :func, :last
attr_writer :last
def initialize(delay, func)
@delay = delay
@func = func
@last = Time.now.to_i
end
end
class Scheduler
def initialize
@tasks = []
end
def add_task(delay, func)
@tasks.push( Task.new(delay, func) )
end
def get_tasks
return @tasks
end
def start
loop do
for task in get_tasks do
if Time.now.to_i > task.last
task.func.call
task.last = Time.now.to_i + task.delay
end
end
sleep(0.1)
end
end
end
class Counter
def initialize(&func)
@func = func
@count = 1
end
def call
@func.call(@count)
@count += 1
end
end
if $0 == __FILE__ then
def foo_func(num)
puts "foo(%d)" % num
end
def bar_func(num)
puts "bar(#{num})"
end
scheduler = Scheduler.new
scheduler.add_task(1, Counter.new(&Proc.new{|num| foo_func(num)}))
scheduler.add_task(5, Counter.new(&Proc.new{|num| bar_func(num)}))
scheduler.start
end
syntax highlighted by Code2HTML, v. 0.9.1