You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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!
The text was updated successfully, but these errors were encountered:
The bottom line of the discussion on caml-list is that such a "timeout" function cannot be implemented correctly on non-Unix platforms, esp. Windows, but also JS-of-OCaml. So, probably, what you're asking for is impossible.
There might be a way to partially emulate Unix.setitimer under Windows, creating a separate thread that posts pseudo-signals periodically. However, such pseudo-signals will not interrupt blocking I/O operations and will only be processed when the OCaml code polls for pending signals. This might be good enough for some applications, but certainly not all.
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!
The text was updated successfully, but these errors were encountered: