Stop Ruby - jRuby - поток через определенное время - PullRequest
1 голос
/ 25 февраля 2012

Я пытаюсь создать простую многопоточную программу с jRuby. Он должен запускать и останавливать потоки в течение определенного периода времени, например бежать в течение пяти секунд, затем остановиться. Я довольно новичок в такого рода вещах, так что это, вероятно, довольно просто, но я не могу заставить его работать.

Соответствующий код выглядит так:

require 'java'
require 'timeout'
require './lib/t1.rb'
require './lib/t2.rb'

class Threads
  [...]

  def manage_threads
    thread2 = T2.new
    # Wait for 5 seconds before the thread starts running..
    thread2.run(wait_time = 5)

    Timeout::timeout(10) do
      thread1 = T1.new {}
    end
  end

class T1 < Thread  

  def initialize
    while super.status != "sleep"
      puts "Thread 1"      
      sleep(1)
    end
  end
end

class T2
  include java.lang.Runnable

  def run wait_time
    thread = Thread.new do
      sleep(wait_time)
      loop do
        puts "Thread 2"
        sleep(1)
      end
    end
  end

  def stop_thread(after_run_time)
    sleep(after_run_time)
  end
end

Я уже пробовал пару вещей, например:

# Used timeout 
Timeout::timeout(10) do
   thread1 = T1.new {}
end

# This kinda works, except that it terminates the program and therefore isn't the behavior 
# I want. 

Есть ли у кого-нибудь предложения о том, как 1. запустить поток, запустить его на некоторое время. 2. Запустите новый поток, запустите оба потока параллельно. 2. Остановите поток 1, но продолжайте запускать поток 2. Любые советы / предложения будут оценены.

1 Ответ

0 голосов
/ 26 февраля 2012

Я думаю, что решил это.

Это сделало трюк:

def run wait_time
  thread = Thread.new do
    sleep(wait_time)
    second_counter = 0
    loop do
      puts "Thread 2"
      second_counter += 1
      if second_counter == 15
        sleep
      end
      sleep(1)
    end
  end
end
...