Domi95
Newbie
- Registriert
- Aug. 2009
- Beiträge
- 3
Hey,
ich hab mich an der Thread-Programmierung in oCaml versucht und einen Thread erstellt der die Fibonacci-Zahlen berechnet. Das hat auch alles soweit funktioniert.
Jetzt wollte ich einen zweiten Thread erstellen, welcher den ersten (der die Berechnung durchführt) killt, sobald dieser mehr als x Sekunden dafür benötigt.
Das ist mein Code:
Wenn ich den Code compiliere und ausführe, wird der Berechnungsthread allerdings nicht gestoppt, obwohl die while-Schleife nach einer Sekunde verlassen wird und im Terminal die Ausgabe: "Thread stopped" erscheint, bekomm ich danach das Ergebnis genauso zurück.
Da ich Anfänger in oCaml und Thread-Programmierung bin seh ich nicht so wirklich wo mein Fehler liegt.
Vielleicht aber ihr?
Vielen Dank schonmal!
ich hab mich an der Thread-Programmierung in oCaml versucht und einen Thread erstellt der die Fibonacci-Zahlen berechnet. Das hat auch alles soweit funktioniert.
Jetzt wollte ich einen zweiten Thread erstellen, welcher den ersten (der die Berechnung durchführt) killt, sobald dieser mehr als x Sekunden dafür benötigt.
Das ist mein Code:
Code:
module TimedFuture : sig
type 'a t
val create : ('a -> 'b) -> 'a -> float -> 'b t
val get : 'a t -> 'a option
end = struct
type 'a t = 'a Event.channel
let create f a t =
let c = Event.new_channel () in
let rec loop f = f (); loop f in
let task () =
let b = f a in
loop (fun () -> Event.(sync (send c b)))
in
let start_calc_thread () =
let t1 = Thread.create task () in
while ((Unix.gettimeofday () -. t) < 1.0) do
Printf.printf "Thread should keep running: %f\n"
(Unix.gettimeofday () -. t);
done;
try Thread.kill t1 with t1 -> ();
Printf.printf "Thread stoped\n"
in
let _ = Thread.create start_calc_thread () in
c
let get c = Some Event.(sync (receive c))
end
let option_to_i o = match o with
| None -> 0
| Some x -> x
let test =
let rec f x = match x with
| 1 -> 1
| 2 -> 1
| _ -> f (x-1) + f (x-2)
in
let t = Unix.gettimeofday () in
let ff = TimedFuture.create f 40 t in
Printf.printf "\nResult: %i\n" (option_to_i (TimedFuture.get ff)),
ff
Wenn ich den Code compiliere und ausführe, wird der Berechnungsthread allerdings nicht gestoppt, obwohl die while-Schleife nach einer Sekunde verlassen wird und im Terminal die Ausgabe: "Thread stopped" erscheint, bekomm ich danach das Ergebnis genauso zurück.
Da ich Anfänger in oCaml und Thread-Programmierung bin seh ich nicht so wirklich wo mein Fehler liegt.
Vielleicht aber ihr?
Vielen Dank schonmal!