6 #include "cAudioSleep.h" 10 cAudioThread::cAudioThread(IThreadWorker* pWorker) : ThreadHandle(0), Worker(pWorker), ThreadID(0), IsInit(false), Loop(true)
14 cAudioThread::~cAudioThread()
18 bool cAudioThread::start()
20 cAudioMutexBasicLock lock(Mutex);
27 #ifdef CAUDIO_PLATFORM_WIN 28 ThreadHandle = reinterpret_cast<HANDLE>(_beginthreadex(0, 0, threadFunc,
this, 0, &ThreadID));
30 pthread_create( &ThreadHandle, 0, threadFunc,
this );
32 IsInit = ThreadHandle != 0;
35 void cAudioThread::join()
37 cAudioMutexBasicLock lock(Mutex);
41 #ifdef CAUDIO_PLATFORM_WIN 42 WaitForSingleObject(ThreadHandle, INFINITE);
44 pthread_join(ThreadHandle, NULL);
48 void cAudioThread::shutdown()
50 cAudioMutexBasicLock lock(Mutex);
54 #ifdef CAUDIO_PLATFORM_WIN 61 void cAudioThread::updateLoop()
72 bool cAudioThread::isRunning()
74 return Loop && IsInit;
77 #ifdef CAUDIO_PLATFORM_WIN 82 const DWORD MS_VC_EXCEPTION = 0x406D1388;
85 typedef struct tagTHREADNAME_INFO
94 inline void SetThreadName(DWORD dwThreadID,
const char* threadName)
98 info.szName = threadName;
99 info.dwThreadID = dwThreadID;
104 RaiseException(MS_VC_EXCEPTION, 0,
sizeof(info) /
sizeof(ULONG_PTR), (ULONG_PTR*)&info);
106 __except (EXCEPTION_EXECUTE_HANDLER)
111 unsigned int __stdcall cAudioThread::threadFunc(
void *args)
113 cAudioThread* pThread = reinterpret_cast<cAudioThread*>(args);
114 SetThreadName(GetCurrentThreadId(),
"cAudio");
115 pThread->updateLoop();
119 void* cAudioThread::threadFunc(
void* args)
121 cAudioThread* pThread = reinterpret_cast<cAudioThread*>(args);
122 #if defined(CAUDIO_PLATFORM_MAC) || defined(CAUDIO_PLATFORM_IPHONE) 123 pthread_setname_np(
"cAudio");
125 pthread_setname_np(pthread_self(),
"cAudio");
127 pThread->updateLoop();
Main namespace for the entire cAudio library.