edit: $/Dev10/feature/vs_langs01_s/Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/rubyspec/library/timeout/timeout_spec.rb;C1086571
File: timeout_spec.rb
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/rubyspec/library/timeout/timeout_spec.rb;C1086571  (server)    3/17/2010 3:18 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/rubyspec/library/timeout/timeout_spec.rb;timeout
@@ -49,4 +49,8 @@
       42
     end.should == 42
   end
+  
+  it "accepts Float arguments" do
+    Timeout::timeout(123.456) { 42 }.should == 42
+  end  
 end
===================================================================
edit: $/Dev10/feature/vs_langs01_s/Merlin/External.LCA_RESTRICTED/Languages/Ruby/redist-libs/ruby/1.8/timeout.rb;C966724
File: timeout.rb
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/External.LCA_RESTRICTED/Languages/Ruby/redist-libs/ruby/1.8/timeout.rb;C966724  (server)    3/17/2010 11:23 AM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/External.LCA_RESTRICTED/Languages/Ruby/redist-libs/ruby/1.8/timeout.rb;timeout
@@ -55,11 +55,27 @@
     exception = klass || Class.new(ExitException)
     begin
       x = Thread.current
-      y = Thread.start {
-        sleep sec
-        x.raise exception, "execution expired" if x.alive?
-      }
-      yield sec
+      
+      if RUBY_ENGINE == "ironruby"
+        # Creating a thread is expensive. So we use a timer instead
+        callback = lambda { x.raise exception, "execution expired" if x.alive? }
+        callback_delegate = System::Threading::TimerCallback.new(callback)
+        timer = System::Threading::Timer.new(
+          callback_delegate, 
+          nil, 
+          System::Int64.new(sec * 1000),
+          System::Threading::Timeout.Infinite)
+        result = yield sec
+        timer.Dispose()
+        result
+      else        
+        y = Thread.start {
+          sleep sec
+          x.raise exception, "execution expired" if x.alive?
+        }
+        yield sec
+      end
+            
       #    return true
     rescue exception => e
       rej = /\A#{Regexp.quote(__FILE__)}:#{__LINE__-4}\z/o
===================================================================
