diff test/testsem.c @ 5108:d547877e355e

Colin Leroy 2011-01-26 04:24:20 PST the pthread implementation of SDL_SemWaitTimeout() uses busy waiting, while pthread's sem_timedwait() does work. Attached are patches that make use of it
author Sam Lantinga <slouken@libsdl.org>
date Thu, 27 Jan 2011 00:34:12 -0800
parents c121d94672cb
children
line wrap: on
line diff
--- a/test/testsem.c	Thu Jan 27 00:19:46 2011 -0800
+++ b/test/testsem.c	Thu Jan 27 00:34:12 2011 -0800
@@ -39,6 +39,29 @@
     alive = 0;
 }
 
+static void
+TestWaitTimeout(void)
+{
+    Uint32 start_ticks;
+    Uint32 end_ticks;
+    Uint32 duration;
+
+    sem = SDL_CreateSemaphore(0);
+    printf("Waiting 2 seconds on semaphore\n");
+
+    start_ticks = SDL_GetTicks();
+    SDL_SemWaitTimeout(sem, 2000);
+    end_ticks = SDL_GetTicks();
+
+    duration = end_ticks - start_ticks;
+
+    /* Accept a little offset in the effective wait */
+    if (duration > 1900 && duration < 2050)
+        printf("Wait done.\n");
+    else
+        fprintf(stderr, "Wait took %d milliseconds\n", duration);
+}
+
 int
 main(int argc, char **argv)
 {
@@ -81,6 +104,9 @@
     printf("Finished waiting for threads\n");
 
     SDL_DestroySemaphore(sem);
+
+    TestWaitTimeout();
+
     SDL_Quit();
     return (0);
 }