2011-03-04 218 views

回答

0

這是一個相當模糊的定義問題。下面是幾個想法:

  1. 使用shell作爲控制過程。啓動JRuby腳本,將其發送到後臺,休眠一段固定的時間,然後殺死$!
  2. 在JRuby腳本的開頭,創建一個睡眠一段固定時間的線程,然後殺死整個腳本。
  3. 如果您使用的是嵌入式JRuby,則可以使用Java的線程完成您想要的操作。
+1

_IF您使用的是嵌入式JRuby中,你可以使用Java的線程來做你want._什麼是的,我在裏面用它JVM。但我該如何阻止它? – RubyDosa 2011-03-07 06:41:08

0

我有同樣的問題。我目前的方法看起來像這樣(並且不按預期工作......):

// jruby-complete-1.6.0.RC2.jar 
import org.jruby.Ruby; 

class JRubyStop { 
    public static void main(String[] args) throws InterruptedException { 
     final Ruby jruby = Ruby.newInstance(); 
     Thread jrubyThread = new Thread() { 
      public void run() { 
       String scriptlet = "for i in 0..100; puts i; sleep(1); end"; 
       jruby.evalScriptlet(scriptlet); 
      } 
     }; 
     jrubyThread.start(); 
     Thread.sleep(5000); 
     System.out.println("interrupt!"); 
     jrubyThread.interrupt(); 
     System.out.println("interrupted?!"); 
    } 
} 

輸出「中斷?!」後,線程仍然運行,直到scriptlet結束。

編輯:將Groovy示例轉換爲Java SSCCE(http://sscce.org/)。

+0

_輸出「中斷?!」後線程仍然運行,直到腳本結束。如果你的是一個簡單的應用程序,你可以嘗試使用Thread.stop()而不是Thread.interrupt() – RubyDosa 2011-03-07 04:40:03

+0

謝謝,它的工作。我不情願地使用Thread.stop(),因爲它已被棄用。我必須再測試一下,因爲我必須用Ruby調用幾個Java方法。 – 2011-03-07 09:46:46

+0

我還發現http://jira.codehaus.org/browse/JRUBY-4135其中一些JRuby人談論中斷線程的問題。 – 2011-03-07 09:48:48

0

超遲到的回答,但是這是我使用:

require 'timeout' 
status = Timeout::timeout(5) 

{ 
    # Something that should be interrupted if it takes more than 5 seconds... 
}