75ece68dcf
Made cAudio, cAudioCapture, cAudioManager and other classes thread safe. Made cAudioManager use a seperate update thread by default. Added cAudioSleep, a cross-platform sleep() function Moved global defines to cAudioDefines Added defines to disable thread safety or the internal update thread if the user wishes it Updated tutorials to reflect the changes made
83 lines
1.4 KiB
C++
83 lines
1.4 KiB
C++
#include "../Headers/cMutex.h"
|
|
|
|
namespace cAudio
|
|
{
|
|
#ifdef CAUDIO_MAKE_THREAD_SAFE
|
|
cAudioMutex::cAudioMutex() : Initialized(false)
|
|
{
|
|
}
|
|
|
|
cAudioMutex::~cAudioMutex()
|
|
{
|
|
if(!Initialized)
|
|
return;
|
|
#ifdef _WIN32
|
|
DeleteCriticalSection(&criticalSection);
|
|
#else
|
|
pthread_mutex_destroy(&Mutex);
|
|
#endif
|
|
}
|
|
|
|
void cAudioMutex::lock(void)
|
|
{
|
|
if(!Initialized)
|
|
initialize();
|
|
|
|
#ifdef _WIN32
|
|
EnterCriticalSection(&criticalSection);
|
|
#else
|
|
int error = pthread_mutex_lock(&Mutex);
|
|
#endif
|
|
}
|
|
|
|
void cAudioMutex::unlock(void)
|
|
{
|
|
if(!Initialized)
|
|
return;
|
|
#ifdef _WIN32
|
|
LeaveCriticalSection(&criticalSection);
|
|
#else
|
|
int error = pthread_mutex_unlock(&Mutex);
|
|
#endif
|
|
}
|
|
|
|
void cAudioMutex::initialize(void)
|
|
{
|
|
#ifdef _WIN32
|
|
InitializeCriticalSection(&criticalSection);
|
|
#else
|
|
pthread_mutexattr_t attr;
|
|
int error = pthread_mutexattr_init(&attr);
|
|
error = pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE);
|
|
error = pthread_mutex_init(&Mutex, &attr);
|
|
error = pthread_mutexattr_destroy(&attr);
|
|
#endif
|
|
Initialized=true;
|
|
}
|
|
#else
|
|
cAudioMutex::cAudioMutex() : Initialized(false)
|
|
{
|
|
}
|
|
|
|
cAudioMutex::~cAudioMutex()
|
|
{
|
|
//Do nothing
|
|
}
|
|
|
|
void cAudioMutex::lock(void)
|
|
{
|
|
//Do nothing
|
|
}
|
|
|
|
void cAudioMutex::unlock(void)
|
|
{
|
|
//Do nothing
|
|
}
|
|
|
|
void cAudioMutex::initialize(void)
|
|
{
|
|
//Do nothing
|
|
}
|
|
#endif
|
|
|
|
}; |