Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

usleep feature #4023

Closed
vicuna opened this issue May 13, 2006 · 6 comments
Closed

usleep feature #4023

vicuna opened this issue May 13, 2006 · 6 comments

Comments

@vicuna
Copy link

vicuna commented May 13, 2006

Original bug ID: 4023
Reporter: Christophe
Status: closed (set by @xavierleroy on 2017-09-24T15:32:54Z)
Resolution: fixed
Priority: normal
Severity: feature
Version: 3.09.2
Fixed in version: 4.03.0+dev / +beta1
Category: ~DO NOT USE (was: OCaml general)
Tags: patch, junior_job
Related to: #7257
Monitored by: @gasche n8gray

Bug description

Hello,

it would be very nice to have a function usleep in Unix. Now, there is only sleep that waits for
a given number of seconds, but most of the time, it is not accurate (what if I need to wait 0.1 sec ?)
There is a 'delay' function in Threads, but sometimes, I need to compile without the thread library,
due to external constraints...
So it would be nice to have a usleep function in Unix, that just waits like sleep, but that take a float argument, or a given number of mili or microseconds...

Thank you !

File attachments

@vicuna
Copy link
Author

vicuna commented May 17, 2006

Comment author: berke

You can use select:

let usleep t = ignore (select [] [] [] t);;

@vicuna
Copy link
Author

vicuna commented Aug 23, 2006

Comment author: n8gray

Great! Include that one-liner in the Unix module and mark the bug fixed. Seriously. Convenience functions make users happy and productive. :)

@vicuna
Copy link
Author

vicuna commented Jun 22, 2014

Comment author: @thizanne

Just in case, I included a patch which adds this function "more natively". It uses the usleep Unix function for the Unix module (as sleep uses the sleep Unix function). The Thread module also has a Unix module which follows the same interface, but whose implementation is different. I'm not sure exactly how to add or not this operation to threads, I made a compromise adding it to the implementation of the Unix module of threads but not to the interface of the Thread module itself. Also, it is almost exactly equivalent here to sleep time * 1e-6, only saving one multiplication by 1e-6.

@vicuna
Copy link
Author

vicuna commented Jun 23, 2014

Comment author: nevor

Hello thizanne, you seem to have forgotten the "usleep.c" in your patch. Besides, I have two concerns about usleep, the first one is that this function is deprecated since posix 2001 and the second one is that, at first sight, there is no direct equivalent on Windows. So I'm wondering how the "native" usleep version compares to the one-liner of berke in term of portability and precision.

@vicuna
Copy link
Author

vicuna commented Jun 23, 2014

Comment author: @thizanne

Sorry for usleep.c, I attached the full patch. As for the Windows availability, I could not test and did not think Unix.sleep worked on Windows anyway, so there was no reason to make Unix.usleep work. I checked today and sleep does work on Windows, however the Sleep(...) from Win32 uses microseconds so it should be usable for usleep. However I see no immediate replacement for nanosleep which apparently replaces usleep in Unix. So in terms of simplicity, the solution with select is definitely ahead - and I saw it while looking for stuff about usleep, so it could be precise enough.

@vicuna
Copy link
Author

vicuna commented Nov 15, 2015

Comment author: @xavierleroy

Implemented as Unix.sleepf in commit [trunk 50648ed]. See #68 for more details.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant