mirror of
https://github.com/holub/mame
synced 2025-10-05 08:41:31 +03:00
added OSD_EVENT_WAIT_INFINITE and implemented it properly for all platforms (nw)
This commit is contained in:
parent
3bffa5e3cf
commit
894d241fff
@ -14,6 +14,8 @@
|
||||
SYNCHRONIZATION INTERFACES - Events
|
||||
***************************************************************************/
|
||||
|
||||
#define OSD_EVENT_WAIT_INFINITE -1
|
||||
|
||||
/* osd_event is an opaque type which represents a setable/resetable event */
|
||||
|
||||
struct osd_event;
|
||||
|
@ -403,6 +403,9 @@ void osd_event_reset(osd_event *event)
|
||||
|
||||
int osd_event_wait(osd_event *event, osd_ticks_t timeout)
|
||||
{
|
||||
if (timeout == OSD_EVENT_WAIT_INFINITE)
|
||||
timeout = osd_ticks_per_second() * (osd_ticks_t)10000;
|
||||
|
||||
pthread_mutex_lock(&event->mutex);
|
||||
if (!timeout)
|
||||
{
|
||||
|
@ -381,11 +381,17 @@ void osd_event_reset(osd_event *event)
|
||||
int osd_event_wait(osd_event *event, osd_ticks_t timeout)
|
||||
{
|
||||
ULONG rc;
|
||||
ULONG timeout_param;
|
||||
|
||||
if (timeout == OSD_EVENT_WAIT_INFINITE)
|
||||
timeout_param = SEM_INDEFINITE_WAIT;
|
||||
else
|
||||
timeout_param = timeout * 1000 / osd_ticks_per_second();
|
||||
|
||||
if(event->autoreset)
|
||||
DosRequestMutexSem(event->hmtx, -1);
|
||||
|
||||
rc = DosWaitEventSem(event->hev, timeout * 1000 / osd_ticks_per_second());
|
||||
rc = DosWaitEventSem(event->hev, timeout_param);
|
||||
|
||||
if(event->autoreset)
|
||||
{
|
||||
|
@ -247,6 +247,8 @@ void osd_event_reset(osd_event *event)
|
||||
int osd_event_wait(osd_event *event, osd_ticks_t timeout)
|
||||
{
|
||||
LOG(("osd_event_wait"));
|
||||
if (timeout == OSD_EVENT_WAIT_INFINITE)
|
||||
timeout = osd_ticks_per_second() * (osd_ticks_t)10000;
|
||||
SDL_mutexP(event->mutex);
|
||||
if (!timeout)
|
||||
{
|
||||
|
@ -238,6 +238,9 @@ void osd_event_reset(osd_event *event)
|
||||
|
||||
int osd_event_wait(osd_event *event, osd_ticks_t timeout)
|
||||
{
|
||||
if (timeout == OSD_EVENT_WAIT_INFINITE)
|
||||
timeout = osd_ticks_per_second() * (osd_ticks_t)10000;
|
||||
|
||||
pthread_mutex_lock(&event->mutex);
|
||||
if (!timeout)
|
||||
{
|
||||
|
@ -239,8 +239,14 @@ void osd_event_reset(osd_event *event)
|
||||
|
||||
int osd_event_wait(osd_event *event, osd_ticks_t timeout)
|
||||
{
|
||||
int ret = WaitForSingleObject((HANDLE) event, timeout * 1000 / osd_ticks_per_second());
|
||||
return ( ret == WAIT_OBJECT_0);
|
||||
DWORD timeout_param;
|
||||
if (timeout == OSD_EVENT_WAIT_INFINITE)
|
||||
timeout_param = INFINITE;
|
||||
else
|
||||
timeout_param = timeout * 1000 / osd_ticks_per_second();
|
||||
|
||||
int ret = WaitForSingleObject((HANDLE) event, timeout_param);
|
||||
return (ret == WAIT_OBJECT_0);
|
||||
}
|
||||
|
||||
//============================================================
|
||||
|
@ -58,7 +58,6 @@ typedef void *PVOID;
|
||||
#if defined(OSD_WINDOWS)
|
||||
#define SPIN_LOOP_TIME (osd_ticks_per_second() / 50000)
|
||||
#else
|
||||
#define INFINITE (osd_ticks_per_second() * (osd_ticks_t) 10000)
|
||||
#define SPIN_LOOP_TIME (osd_ticks_per_second() / 10000)
|
||||
#endif
|
||||
|
||||
@ -659,7 +658,7 @@ static void *worker_thread_entry(void *param)
|
||||
if (!queue_has_list_items(queue))
|
||||
{
|
||||
begin_timing(thread->waittime);
|
||||
osd_event_wait(thread->wakeevent, INFINITE);
|
||||
osd_event_wait(thread->wakeevent, OSD_EVENT_WAIT_INFINITE);
|
||||
end_timing(thread->waittime);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user