added Library.thread_actor -- thread as actor;
authorwenzelm
Tue, 10 Aug 2010 12:09:53 +0200
changeset 38258 dd7dcb9b2637
parent 38257 f0fd14a9c11f
child 38259 2b61c5e27399
added Library.thread_actor -- thread as actor;
src/Pure/library.scala
--- a/src/Pure/library.scala	Tue Aug 10 12:08:24 2010 +0200
+++ b/src/Pure/library.scala	Tue Aug 10 12:09:53 2010 +0200
@@ -6,11 +6,12 @@
 
 package isabelle
 
-import java.lang.System
+
+import java.lang.{System, Thread}
 import java.awt.Component
 import javax.swing.JOptionPane
 
-
+import scala.actors.Actor
 import scala.swing.ComboBox
 import scala.swing.event.SelectionChanged
 
@@ -138,4 +139,15 @@
         ((stop - start).toDouble / 1000000) + "ms elapsed time")
     Exn.release(result)
   }
+
+
+  /* thread as actor */
+
+  def thread_actor(name: String)(body: => Unit): Actor =
+  {
+    val actor = Future.promise[Actor]
+    val thread = new Thread(name) { override def run() = { actor.fulfill(Actor.self); body } }
+    thread.start
+    actor.join
+  }
 }