mirror of
https://github.com/bkaradzic/bx.git
synced 2026-02-18 04:53:06 +01:00
Added thread queue.
This commit is contained in:
@@ -7,12 +7,12 @@
|
||||
#define BX_THREAD_H_HEADER_GUARD
|
||||
|
||||
#include "bx.h"
|
||||
#include "semaphore.h"
|
||||
#include "mpscqueue.h"
|
||||
|
||||
namespace bx
|
||||
{
|
||||
///
|
||||
typedef int32_t (*ThreadFn)(void* _userData);
|
||||
typedef int32_t (*ThreadFn)(class Thread* _self, void* _userData);
|
||||
|
||||
///
|
||||
class Thread
|
||||
@@ -44,6 +44,12 @@ namespace bx
|
||||
///
|
||||
void setThreadName(const char* _name);
|
||||
|
||||
///
|
||||
void push(void* _ptr);
|
||||
|
||||
///
|
||||
void* pop();
|
||||
|
||||
private:
|
||||
friend struct ThreadInternal;
|
||||
int32_t entry();
|
||||
@@ -52,7 +58,7 @@ namespace bx
|
||||
|
||||
ThreadFn m_fn;
|
||||
void* m_userData;
|
||||
Semaphore m_sem;
|
||||
MpScUnboundedBlockingQueue<void> m_queue;
|
||||
uint32_t m_stackSize;
|
||||
int32_t m_exitCode;
|
||||
bool m_running;
|
||||
|
||||
@@ -150,7 +150,7 @@ namespace bx
|
||||
# error "Not implemented!"
|
||||
#endif // BX_PLATFORM_
|
||||
|
||||
m_sem.wait();
|
||||
m_queue.pop();
|
||||
|
||||
if (NULL != _name)
|
||||
{
|
||||
@@ -243,6 +243,16 @@ namespace bx
|
||||
#endif // BX_PLATFORM_
|
||||
}
|
||||
|
||||
void Thread::push(void* _ptr)
|
||||
{
|
||||
m_queue.push(_ptr);
|
||||
}
|
||||
|
||||
void* Thread::pop()
|
||||
{
|
||||
return m_queue.pop();
|
||||
}
|
||||
|
||||
int32_t Thread::entry()
|
||||
{
|
||||
#if BX_PLATFORM_WINDOWS
|
||||
@@ -250,8 +260,8 @@ namespace bx
|
||||
ti->m_threadId = ::GetCurrentThreadId();
|
||||
#endif // BX_PLATFORM_WINDOWS
|
||||
|
||||
m_sem.post();
|
||||
return m_fn(m_userData);
|
||||
m_queue.push(NULL);
|
||||
return m_fn(this, m_userData);
|
||||
}
|
||||
|
||||
struct TlsDataInternal
|
||||
|
||||
Reference in New Issue
Block a user