def start_work_thread
thread =
Thread.new do
Thread.current[@scheduler.thread_key] = true
Thread.current[:rufus_scheduler_work_thread] = true
loop do
job, time = @scheduler.work_queue.pop
break if @scheduler.started_at == nil
next if job.unscheduled_at
begin
(job.opts[:mutex] || []).reduce(
lambda { job.trigger_now(time) }
) do |b, m|
lambda { mutex(m).synchronize { b.call } }
end.call
rescue KillSignal
end
end
end
thread[@scheduler.thread_key] = true
thread[:rufus_scheduler_work_thread] = true
thread
end