OSDN Git Service

修正
[sdl2referencejp/sdl2referencejp.git] / SDL_SemWaitTimeout.html
index b4206d5..75896f0 100644 (file)
 <h2>\96ß\82è\92l</h2>\r
 \91Ò\8b@\91\80\8dì\82É\90¬\8c÷\82µ\82½\82Æ\82«0, \91Ò\82¿\8e\9e\8aÔ\93à\82É\91Ò\8b@\91\80\8dì\82É\90¬\8c÷\82µ\82È\82©\82Á\82½\82Æ\82«SDL_MUTEX_TIMEDOUT, \8e¸\94s\82Ì\82Æ\82«\95\89\82Ì\90\94\82Ì\83G\83\89\81[\83R\81[\83h\82ð\96ß\82·.\r
 <a href="SDL_GetError.html">SDL_GetError()</a>\82Å\8fÚ\8d×\82ð\92m\82é\82±\82Æ\82ª\82Å\82«\82é.\r
+<h2>\83T\83\93\83v\83\8b\83R\81[\83h</h2>\r
+<p>\r
+<code>\r
+<pre>\r
+SDL_atomic_t done;\r
+SDL_sem *sem;\r
+\r
+SDL_AtomicSet(&amp;done, 0);\r
+sem = SDL_CreateSemaphore(0);\r
+.\r
+.\r
+Thread A:\r
+    while (!SDL_AtomicGet(&amp;done)) {\r
+        add_data_to_queue();\r
+        SDL_SemPost(sem);\r
+    }\r
+\r
+Thread B:\r
+    const Uint32 timeout = 1000; /* 1\95b\82²\82Æ\82É\93®\8dì\82·\82é */\r
+\r
+    while (!SDL_AtomicGet(&amp;done)) {\r
+        if (SDL_SemWaitTimeout(sem, timeout) == 0 &amp;&amp; data_available()) {\r
+            get_data_from_queue();\r
+        }\r
+        ... \82±\82±\82Å\91¼\82Ì\8f\88\97\9d\82ð\8ds\82¤\r
+    }\r
+.\r
+.\r
+SDL_AtomicSet(&amp;done, 1);\r
+SDL_SemPost(sem);\r
+wait_for_threads();\r
+SDL_DestroySemaphore(sem);\r
+</pre>\r
+</code>\r
+</p>\r
 <h2>\8fÚ\8d×</h2>\r
 <p>\r
 \83Z\83}\83t\83Hsem\82Ì\92l\82ª\90³\82É\82È\82é, \8a\84\82è\8d\9e\82Ý\82ª\94­\90\82·\82é, \83G\83\89\81[\82ª\94­\90\82·\82é, \82Ü\82½\82Í\91Ò\82¿\8e\9e\8aÔ\82ª\8co\89ß\82·\82é\82Ü\82Å\82±\82Ì\8aÖ\90\94\82ð\8cÄ\82ñ\82¾\83X\83\8c\83b\83h\82ð\92â\8e~\82·\82é.\r