Provide an nusleep equivalent function to nmsleep.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
diff --git a/util.c b/util.c
index 07669e3..1433477 100644
--- a/util.c
+++ b/util.c
@@ -844,6 +844,29 @@ void nmsleep(unsigned int msecs)
#endif
}
+/* Same for usecs */
+void nusleep(unsigned int usecs)
+{
+ struct timespec twait, tleft;
+ int ret;
+ ldiv_t d;
+
+#ifdef WIN32
+ timeBeginPeriod(1);
+#endif
+ d = ldiv(usecs, 1000000);
+ tleft.tv_sec = d.quot;
+ tleft.tv_nsec = d.rem * 1000;
+ do {
+ twait.tv_sec = tleft.tv_sec;
+ twait.tv_nsec = tleft.tv_nsec;
+ ret = nanosleep(&twait, &tleft);
+ } while (ret == -1 && errno == EINTR);
+#ifdef WIN32
+ timeEndPeriod(1);
+#endif
+}
+
/* This is a cgminer gettimeofday wrapper. Since we always call gettimeofday
* with tz set to NULL, and windows' default resolution is only 15ms, this
* gives us higher resolution times on windows. */
diff --git a/util.h b/util.h
index be16318..5facbc5 100644
--- a/util.h
+++ b/util.h
@@ -58,6 +58,7 @@ int thr_info_create(struct thr_info *thr, pthread_attr_t *attr, void *(*start) (
void thr_info_freeze(struct thr_info *thr);
void thr_info_cancel(struct thr_info *thr);
void nmsleep(unsigned int msecs);
+void nusleep(unsigned int usecs);
void cgtime(struct timeval *tv);
void subtime(struct timeval *a, struct timeval *b);
void addtime(struct timeval *a, struct timeval *b);