如何在红宝石中找到睡觉线的时间?

时间:2012-09-07 06:45:17

标签: ruby multithreading

我正在处理内部具有常量循环的线程。我想检查线程正在睡多久。

如何找到线程的休眠时间?

这是代码

 t = Thread.new{
     loop do
        puts "thread "
        threads=Thread.list
        threads.each_with_index do |th,index|              
            th.status == "run"  ? th.priority = 2 :  th.priority = 0
            if th.status == "false" || th.status == "sleep" 
               th.kill 
            end
            print "thread #{th} : State=> #{th.status} : priority=> #{th.priority} :index=> #{index}  \n "              
        end
     end
  }

我想知道睡眠线程的时间,以便我可以杀死正确的线程。因为线程的生命应该在某个阶段被杀死

1 个答案:

答案 0 :(得分:2)

您可以设置线程级别变量以在创建给定线程时获取信息:

t = Thread.new{}
t[:created_at] = Time.now

如果你想知道线程休眠多长时间,你需要在每次线程进入休眠状态时设置该值,并在线程唤醒后重置它。 所以你的支票看起来像是

 th.kill if Time.now - th[:created_at] > MAX_THREAD_LIFETIME