aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/core/support/time_win32.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/core/support/time_win32.c b/src/core/support/time_win32.c
index f221cb5790..539470bccf 100644
--- a/src/core/support/time_win32.c
+++ b/src/core/support/time_win32.c
@@ -39,6 +39,7 @@
#include <grpc/support/time.h>
#include <sys/timeb.h>
+#include <windows.h>
gpr_timespec gpr_now(void) {
gpr_timespec now_tv;
@@ -49,4 +50,23 @@ gpr_timespec gpr_now(void) {
return now_tv;
}
+void gpr_sleep_until(gpr_timespec until) {
+ gpr_timespec now;
+ gpr_timespec delta;
+ DWORD sleep_millis;
+
+ for (;;) {
+ /* We could simplify by using clock_nanosleep instead, but it might be
+ * slightly less portable. */
+ now = gpr_now();
+ if (gpr_time_cmp(until, now) <= 0) {
+ return;
+ }
+
+ delta = gpr_time_sub(until, now);
+ sleep_millis = delta.tv_sec * GPR_MS_PER_SEC + delta.tv_nsec / GPR_NS_PER_MS;
+ Sleep(sleep_millis);
+ }
+}
+
#endif /* GPR_WIN32 */