core/logic/thread/WinThreads.h
changeset 4025 542dde661d5c
parent 2726 c96f3fab8211
child 4033 48eaea10c202
     1.1 --- a/core/logic/thread/WinThreads.h	Mon Aug 19 12:59:10 2013 -0700
     1.2 +++ b/core/logic/thread/WinThreads.h	Mon Aug 19 20:58:02 2013 -0700
     1.3 @@ -32,22 +32,22 @@
     1.4  #ifndef _INCLUDE_WINTHREADS_H_
     1.5  #define _INCLUDE_WINTHREADS_H_
     1.6  
     1.7 +#include <ke_thread_utils.h>
     1.8 +#include <ke_utility.h>
     1.9  #include <windows.h>
    1.10  #include "IThreader.h"
    1.11  
    1.12  using namespace SourceMod;
    1.13  
    1.14 -DWORD WINAPI Win32_ThreadGate(LPVOID param);
    1.15 -
    1.16  class WinThreader : public IThreader
    1.17  {
    1.18  public:
    1.19 -	class ThreadHandle : public IThreadHandle
    1.20 +	class ThreadHandle : public IThreadHandle, public ke::IRunnable
    1.21  	{
    1.22  		friend class WinThreader;
    1.23  		friend DWORD WINAPI Win32_ThreadGate(LPVOID param);
    1.24  	public:
    1.25 -		ThreadHandle(IThreader *parent, HANDLE hthread, IThread *run, const ThreadParams *params);
    1.26 +		ThreadHandle(IThreader *parent, IThread *run, const ThreadParams *params);
    1.27  		virtual ~ThreadHandle();
    1.28  	public:
    1.29  		virtual bool WaitForThread();
    1.30 @@ -58,41 +58,16 @@
    1.31  		virtual bool SetPriority(ThreadPriority prio);
    1.32  		virtual ThreadState GetState();
    1.33  		virtual bool Unpause();
    1.34 +		virtual void Run();
    1.35  	protected:
    1.36  		IThreader *m_parent;		//Parent handle
    1.37 -		HANDLE m_thread;			//Windows HANDLE	
    1.38 +		ke::AutoPtr<ke::Thread> m_thread;
    1.39  		ThreadParams m_params;		//Current Parameters
    1.40 -		IThread *m_run;	//Runnable context
    1.41 +		IThread *m_run;				//Runnable context
    1.42  		ThreadState m_state;		//internal state
    1.43 -		CRITICAL_SECTION m_crit;
    1.44 +		ke::ConditionVariable suspend_;
    1.45  	};
    1.46 -	class WinMutex : public IMutex
    1.47 -	{
    1.48 -	public:
    1.49 -		WinMutex();
    1.50 -		virtual ~WinMutex();
    1.51 -	public:
    1.52 -		virtual bool TryLock();
    1.53 -		virtual void Lock();
    1.54 -		virtual void Unlock();
    1.55 -		virtual void DestroyThis();
    1.56 -	protected:
    1.57 -		CRITICAL_SECTION m_crit;
    1.58 -	};
    1.59 -	class WinEvent : public IEventSignal
    1.60 -	{
    1.61 -	public:
    1.62 -		WinEvent(HANDLE event) : m_event(event)
    1.63 -		{
    1.64 -		};
    1.65 -		virtual ~WinEvent();
    1.66 -	public:
    1.67 -		virtual void Wait();
    1.68 -		virtual void Signal();
    1.69 -		virtual void DestroyThis();
    1.70 -	public:
    1.71 -		HANDLE m_event;
    1.72 -	};
    1.73 +
    1.74  public:
    1.75  	IMutex *MakeMutex();
    1.76  	void MakeThread(IThread *pThread);