Previous 199869 Revisions Next

r34239 Wednesday 7th January, 2015 at 16:03:32 UTC by Oliver Stöneberg
added OSD_EVENT_WAIT_INFINITE and implemented it properly for all platforms (nw)
[src/osd/modules/sync]osdsync.h sync_ntc.c sync_os2.c sync_sdl.c sync_tc.c sync_windows.c work_osd.c

trunk/src/osd/modules/sync/osdsync.h
r242750r242751
1414    SYNCHRONIZATION INTERFACES - Events
1515***************************************************************************/
1616
17#define OSD_EVENT_WAIT_INFINITE -1
18
1719/* osd_event is an opaque type which represents a setable/resetable event */
1820
1921struct osd_event;
trunk/src/osd/modules/sync/sync_ntc.c
r242750r242751
403403
404404int osd_event_wait(osd_event *event, osd_ticks_t timeout)
405405{
406   if (timeout == OSD_EVENT_WAIT_INFINITE)
407      timeout = osd_ticks_per_second() * (osd_ticks_t)10000;
408   
406409   pthread_mutex_lock(&event->mutex);
407410   if (!timeout)
408411   {
trunk/src/osd/modules/sync/sync_os2.c
r242750r242751
381381int osd_event_wait(osd_event *event, osd_ticks_t timeout)
382382{
383383   ULONG rc;
384   ULONG timeout_param;
385   
386   if (timeout == OSD_EVENT_WAIT_INFINITE)
387      timeout_param = SEM_INDEFINITE_WAIT;
388   else
389      timeout_param = timeout * 1000 / osd_ticks_per_second();
384390
385391   if(event->autoreset)
386392      DosRequestMutexSem(event->hmtx, -1);
387393
388   rc = DosWaitEventSem(event->hev, timeout * 1000 / osd_ticks_per_second());
394   rc = DosWaitEventSem(event->hev, timeout_param);
389395
390396   if(event->autoreset)
391397   {
trunk/src/osd/modules/sync/sync_sdl.c
r242750r242751
247247int osd_event_wait(osd_event *event, osd_ticks_t timeout)
248248{
249249   LOG(("osd_event_wait"));
250   if (timeout == OSD_EVENT_WAIT_INFINITE)
251      timeout = osd_ticks_per_second() * (osd_ticks_t)10000;
250252   SDL_mutexP(event->mutex);
251253   if (!timeout)
252254   {
trunk/src/osd/modules/sync/sync_tc.c
r242750r242751
238238
239239int osd_event_wait(osd_event *event, osd_ticks_t timeout)
240240{
241   if (timeout == OSD_EVENT_WAIT_INFINITE)
242      timeout = osd_ticks_per_second() * (osd_ticks_t)10000;
243   
241244   pthread_mutex_lock(&event->mutex);
242245   if (!timeout)
243246   {
trunk/src/osd/modules/sync/sync_windows.c
r242750r242751
239239
240240int osd_event_wait(osd_event *event, osd_ticks_t timeout)
241241{
242   int ret = WaitForSingleObject((HANDLE) event, timeout * 1000 / osd_ticks_per_second());
243   return ( ret == WAIT_OBJECT_0);
242   DWORD timeout_param;
243   if (timeout == OSD_EVENT_WAIT_INFINITE)
244      timeout_param = INFINITE;
245   else
246      timeout_param = timeout * 1000 / osd_ticks_per_second();
247   
248   int ret = WaitForSingleObject((HANDLE) event, timeout_param);
249   return (ret == WAIT_OBJECT_0);
244250}
245251
246252//============================================================
trunk/src/osd/modules/sync/work_osd.c
r242750r242751
5858#if defined(OSD_WINDOWS)
5959#define SPIN_LOOP_TIME          (osd_ticks_per_second() / 50000)
6060#else
61#define INFINITE                (osd_ticks_per_second() *  (osd_ticks_t) 10000)
6261#define SPIN_LOOP_TIME          (osd_ticks_per_second() / 10000)
6362#endif
6463
r242750r242751
659658      if (!queue_has_list_items(queue))
660659      {
661660         begin_timing(thread->waittime);
662         osd_event_wait(thread->wakeevent, INFINITE);
661         osd_event_wait(thread->wakeevent, OSD_EVENT_WAIT_INFINITE);
663662         end_timing(thread->waittime);
664663      }
665664


Previous 199869 Revisions Next


© 1997-2024 The MAME Team