Original bug ID: 5908
Reporter: smimram
Status: resolved (set by @xavierleroy on 2013-01-28T08:56:37Z)
Resolution: suspended
Priority: normal
Severity: feature
Category: standard library
Monitored by: @dbuenzli
Bug description
Hi,
I have tried to program a "timeout" function in a portable way but did not succeed with the current standard library. Since this is quite a commonly used idiom, it might be worth adding such a function to the standard library.
I wanted a "timeout" function of type:
float -> ('a -> 'b) -> 'a -> 'b option
which takes a maximum number n of seconds to run, a function f, an argument x, and returns Some (f x) if the computation ends before n seconds and None otherwise. I have tried the following:
- the simple implementation using Unix.setitimer / Unix.alarm does not work under windows because of signals implementation
- the caml-list suggested using Gc.create_alarm which is portable, but really imprecise (we cannot predict when a gc will occur)
- I could have used threads and Thread.kill, but unfortunately Thread.kill is not implemented with the native compiler
- this could be achieved with monadic threads, but I would rather not change the structure of my whole program
Thanks!
Original bug ID: 5908
Reporter: smimram
Status: resolved (set by @xavierleroy on 2013-01-28T08:56:37Z)
Resolution: suspended
Priority: normal
Severity: feature
Category: standard library
Monitored by: @dbuenzli
Bug description
Hi,
I have tried to program a "timeout" function in a portable way but did not succeed with the current standard library. Since this is quite a commonly used idiom, it might be worth adding such a function to the standard library.
I wanted a "timeout" function of type:
float -> ('a -> 'b) -> 'a -> 'b option
which takes a maximum number n of seconds to run, a function f, an argument x, and returns Some (f x) if the computation ends before n seconds and None otherwise. I have tried the following:
Thanks!