core/logic/thread/PosixThreads.h
changeset 4025 542dde661d5c
parent 2726 c96f3fab8211
child 4031 852cf4415d12
     1.1 --- a/core/logic/thread/PosixThreads.h	Mon Aug 19 12:59:10 2013 -0700
     1.2 +++ b/core/logic/thread/PosixThreads.h	Mon Aug 19 20:58:02 2013 -0700
     1.3 @@ -1,5 +1,5 @@
     1.4  /**
     1.5 - * vim: set ts=4 :
     1.6 + * vim: set ts=4 sw=4 tw=99 noet:
     1.7   * =============================================================================
     1.8   * SourceMod
     1.9   * Copyright (C) 2004-2008 AlliedModders LLC.  All rights reserved.
    1.10 @@ -33,19 +33,17 @@
    1.11  #define _INCLUDE_POSIXTHREADS_H_
    1.12  
    1.13  #include <pthread.h>
    1.14 +#include <ke_thread_utils.h>
    1.15  #include "IThreader.h"
    1.16  
    1.17  using namespace SourceMod;
    1.18  
    1.19 -void *Posix_ThreadGate(void *param);
    1.20 -
    1.21  class PosixThreader : public IThreader
    1.22  {
    1.23  public:
    1.24 -	class ThreadHandle : public IThreadHandle
    1.25 +	class ThreadHandle : public IThreadHandle, public ke::IRunnable
    1.26  	{
    1.27  		friend class PosixThreader;
    1.28 -		friend void *Posix_ThreadGate(void *param);
    1.29  	public:
    1.30  		ThreadHandle(IThreader *parent, IThread *run, const ThreadParams *params);
    1.31  		virtual ~ThreadHandle();
    1.32 @@ -58,43 +56,16 @@
    1.33  		virtual bool SetPriority(ThreadPriority prio);
    1.34  		virtual ThreadState GetState();
    1.35  		virtual bool Unpause();
    1.36 +	public:
    1.37 +		void Run();
    1.38  	protected:
    1.39  		IThreader *m_parent;		//Parent handle
    1.40 -		pthread_t m_thread;			//Windows HANDLE	
    1.41  		ThreadParams m_params;		//Current Parameters
    1.42 -		IThread *m_run;	//Runnable context
    1.43 -		pthread_mutex_t m_statelock;
    1.44 -		pthread_mutex_t m_runlock;
    1.45 +		IThread *m_run;				//Runnable context
    1.46 +		ke::AutoPtr<ke::Thread> m_thread;
    1.47 +		ke::ConditionVariable m_runlock;
    1.48  		ThreadState m_state;		//internal state
    1.49  	};
    1.50 -	class PosixMutex : public IMutex
    1.51 -	{
    1.52 -	public:
    1.53 -		PosixMutex(pthread_mutex_t m) : m_mutex(m)
    1.54 -		{
    1.55 -		};
    1.56 -		virtual ~PosixMutex();
    1.57 -	public:
    1.58 -		virtual bool TryLock();
    1.59 -		virtual void Lock();
    1.60 -		virtual void Unlock();
    1.61 -		virtual void DestroyThis();
    1.62 -	protected:
    1.63 -		pthread_mutex_t m_mutex;
    1.64 -	};
    1.65 -	class PosixEventSignal : public IEventSignal
    1.66 -	{
    1.67 -	public:
    1.68 -		PosixEventSignal();
    1.69 -		virtual ~PosixEventSignal();
    1.70 -	public:
    1.71 -		virtual void Wait();
    1.72 -		virtual void Signal();
    1.73 -		virtual void DestroyThis();
    1.74 -	protected:
    1.75 -		pthread_cond_t m_cond;
    1.76 -		pthread_mutex_t m_mutex;
    1.77 -	};
    1.78  public:
    1.79  	IMutex *MakeMutex();
    1.80  	void MakeThread(IThread *pThread);