/* mpoll.c
*
* Functions for polling MIDAS Sound System in a thread
*
* $Id: mpoll.c,v 1.9 1997/01/26 23:29:45 jpaana Exp $
*
* Copyright 1996,1997 Housemarque Inc.
*
* This file is part of the MIDAS Sound System, and may only be
* used, modified and distributed under the terms of the MIDAS
* Sound System license, LICENSE.TXT. By continuing to use,
* modify or distribute this file you indicate that you have
* read the license and understand and accept it fully.
*/
#ifndef __LINUX__
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <process.h>
#else
#include <unistd.h>
#include "pthread.h"
#endif
#include "midas.h"
RCSID(const char *mpoll_rcsid = "$Id: mpoll.c,v 1.9 1997/01/26 23:29:45 jpaana Exp $";)
#ifdef __LINUX__
static pthread_t pollThread = NULL;
#endif
/****************************************************************************\
*
* Function: void PollMIDAS(void)
*
* Description: Polls MIDAS Sound System
*
\****************************************************************************/
void PollMIDAS(void)
{
int error;
int callMP;
if ( !midasSDInit )
return;
if ( (error = midasSD->StartPlay()) != OK )
midasError(error);
do
{
if ( (error = midasSD->Play(&callMP)) != OK )
midasError(error);
if ( callMP )
{
if ( midasGMPInit )
{
if ( (error = gmpPlay()) != OK )
midasError(error);
}
}
} while ( callMP && (midasSD->tempoPoll == 0) );
}
static volatile int stopPolling = 0;
static volatile unsigned pollSleep = 50;
#ifdef __LINUX__
void *PollerThread(void *dummy)
#else
#ifdef __WC32__
static void PollerThread(void *dummy)
#else
static void __cdecl PollerThread(void *dummy)
#endif
#endif
{
dummy = dummy;
#ifndef __LINUX__
/* We'd better make the player thread's priority still above normal: */
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL);
#endif
while ( stopPolling == 0 )
{
PollMIDAS();
#ifdef __LINUX__
usleep(pollSleep * 1000);
#else
Sleep(pollSleep);
#endif
}
stopPolling = 0;
#ifdef __LINUX__
pthread_exit(0);
return NULL;
#else
_endthread();
#endif
}
/****************************************************************************\
*
* Function: void StartPlayThread(unsigned pollPeriod)
*
* Description: Starts polling MIDAS in a thread
*
* Input: unsigned pollPeriod polling period (delay between two
* polling loops) in milliseconds
*
\****************************************************************************/
void StartPlayThread(unsigned pollPeriod)
{
#ifndef __LINUX__
#ifdef __WC32__
int pollThread;
#else
unsigned long pollThread;
#endif
#else
int code;
#endif
pollSleep = pollPeriod;
/* Start polling MIDAS in a thread: */
#ifdef __LINUX__
code = pthread_create(&pollThread, NULL, PollerThread, NULL);
if ( code )
midasErrorExit("StartPlayThread: Couldn't create player thread!");
#else
#ifdef __WC32__
pollThread = _beginthread(PollerThread, NULL, 4096, NULL);
if ( pollThread == -1 )
midasErrorExit("StartPlayThread: Couldn't create player thread!");
#else
pollThread = _beginthread(PollerThread, 4096, NULL);
if ( pollThread == -1 )
midasErrorExit("StartPlayThread: Couldn't create player thread!");
#endif
#endif
}
/****************************************************************************\
*
* Function: void StopPlayThread(void)
*
* Description: Stops polling MIDAS in a thread
*
\****************************************************************************/
void StopPlayThread(void)
{
#ifdef __LINUX__
void *retval;
#endif
/* Ugly but works */
stopPolling = 1;
while ( stopPolling )
#ifdef __LINUX__
pthread_join(pollThread, &retval);
#else
Sleep(pollSleep/2);
#endif
}
/*
* $Log: mpoll.c,v $
* Revision 1.9 1997/01/26 23:29:45 jpaana
* Small fixes for Linux
*
* Revision 1.8 1997/01/16 18:41:59 pekangas
* Changed copyright messages to Housemarque
*
* Revision 1.7 1996/09/28 09:00:16 jpaana
* Still fixes for Linux
*
* Revision 1.6 1996/09/28 08:12:40 jpaana
* Fixed return value of pthread_create
*
* Revision 1.5 1996/09/28 06:50:36 jpaana
* Fixed for Linuxthreads-0.4
*
* Revision 1.4 1996/09/21 17:40:45 jpaana
* fixed some warnings
*
* Revision 1.3 1996/09/21 17:18:01 jpaana
* Added Linux-stuff
*
* Revision 1.2 1996/09/02 20:19:30 pekangas
* Changed to use _beginthread with Visual C as well
*
* Revision 1.1 1996/08/06 20:36:37 pekangas
* Initial revision
*
*/