diff --git a/libguile/scmsigs.c b/libguile/scmsigs.c
index 8c655f1..8231f83 100644
--- a/libguile/scmsigs.c
+++ b/libguile/scmsigs.c
@@ -613,7 +613,14 @@ SCM_DEFINE (scm_sleep, "sleep", 1, 0, 0,
 	    "See also @code{usleep}.")
 #define FUNC_NAME s_scm_sleep
 {
+#ifdef __MINGW32__
+  /* scm_std_sleep calls scm_std_select, which relies on the "sleep
+   * pipe", but that does not work on Windows. */
+  sleep (scm_to_uint (i));
+  return scm_from_uint (0);
+#else
   return scm_from_uint (scm_std_sleep (scm_to_uint (i)));
+#endif
 }
 #undef FUNC_NAME
 
@@ -632,7 +639,13 @@ SCM_DEFINE (scm_usleep, "usleep", 1, 0, 0,
 	    "See also @code{sleep}.")
 #define FUNC_NAME s_scm_usleep
 {
+#ifdef __MINGW32__
+  /* see related comments in scm_sleep */
+  usleep (scm_to_ulong (i));
+  return scm_from_ulong (0);
+#else
   return scm_from_ulong (scm_std_usleep (scm_to_ulong (i)));
+#endif
 }
 #undef FUNC_NAME
 
