--- a/src/Pure/Concurrent/future.ML Mon Apr 09 15:10:52 2012 +0200
+++ b/src/Pure/Concurrent/future.ML Mon Apr 09 17:22:23 2012 +0200
@@ -52,8 +52,8 @@
val peek: 'a future -> 'a Exn.result option
val is_finished: 'a future -> bool
val interruptible_task: ('a -> 'b) -> 'a -> 'b
- val cancel_group: group -> task list
- val cancel: 'a future -> task list
+ val cancel_group: group -> unit
+ val cancel: 'a future -> unit
type params = {name: string, group: group option, deps: task list, pri: int, interrupts: bool}
val default_params: params
val forks: params -> (unit -> 'a) list -> 'a future list
@@ -74,6 +74,8 @@
val fulfill: 'a future -> 'a -> unit
val shutdown: unit -> unit
val status: (unit -> 'a) -> 'a
+ val group_tasks: group -> task list
+ val queue_status: unit -> {ready: int, pending: int, running: int, passive: int}
end;
structure Future: FUTURE =
@@ -181,9 +183,9 @@
fun cancel_now group = (*requires SYNCHRONIZED*)
let
- val (tasks, threads) = Task_Queue.cancel (! queue) group;
- val _ = List.app Simple_Thread.interrupt_unsynchronized threads;
- in tasks end;
+ val running = Task_Queue.cancel (! queue) group;
+ val _ = List.app Simple_Thread.interrupt_unsynchronized running;
+ in running end;
fun cancel_all () = (*requires SYNCHRONIZED*)
let
@@ -413,7 +415,7 @@
val _ =
if null running then ()
else (cancel_later group; signal work_available; scheduler_check ());
- in running end);
+ in () end);
fun cancel x = cancel_group (Task_Queue.group_of_task (task_of x));
@@ -650,6 +652,13 @@
in x end;
+(* queue status *)
+
+fun group_tasks group = Task_Queue.group_tasks (! queue) group;
+
+fun queue_status () = Task_Queue.status (! queue);
+
+
(*final declarations of this structure!*)
val map = map_future;