Это означает, что сигнал был отправлен вашей программе во время вызова на select
.
Если вы используете OCaml 4.03 или выше, вы можете использовать функцию Unix.sleepf
, которая делает именно то, что вы ожидаете:
# Unix.sleepf;;
- : float -> unit = <fun>
В более старых версиях OCaml вы можете использовать функцию setitimer
, которая потребует некоторой обработки сигналов:
exception Alarm
let () = Sys.set_signal Sys.sigalrm ( Sys.Signal_handle (fun _ -> raise Alarm) )
let pause f =
let _ = Unix.setitimer Unix.ITIMER_REAL
{ Unix.it_interval = 0.; Unix.it_value = f; } in
try Unix.sleep (int_of_float (ceil f)) with
| Alarm -> ()
Обратите внимание, что это не совсем потокобезопасно и будетконфликт с другими видами использования SIGALRM
.Я настоятельно рекомендую вам перейти на самую последнюю версию OCaml.