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);