src/Pure/Concurrent/event_timer.ML
changeset 52798 9d3c9862d1dd
parent 52589 d28d2d89034d
child 56768 06388a5cfb7c
--- a/src/Pure/Concurrent/event_timer.ML	Tue Jul 30 16:22:07 2013 +0200
+++ b/src/Pure/Concurrent/event_timer.ML	Tue Jul 30 18:19:16 2013 +0200
@@ -14,6 +14,7 @@
   val request: Time.time -> event -> request
   val cancel: request -> bool
   val shutdown: unit -> unit
+  val future: Time.time -> unit future
 end;
 
 structure Event_Timer: EVENT_TIMER =
@@ -125,5 +126,16 @@
     else if is_none manager then SOME ((), init_state)
     else NONE);
 
+
+(* future *)
+
+val future = uninterruptible (fn _ => fn time =>
+  let
+    val req: request Single_Assignment.var = Single_Assignment.var "request";
+    fun abort () = ignore (cancel (Single_Assignment.await req));
+    val promise: unit future = Future.promise abort;
+    val _ = Single_Assignment.assign req (request time (Future.fulfill promise));
+  in promise end);
+
 end;