core/thread/WinThreads.h
author David Anderson <dvander@alliedmods.net>
Mon Jul 09 16:14:16 2007 +0000 (2007-07-09)
changeset 1085 fbfc3f408647
parent 1084 241c1b9b4048
child 1087 a7ee64117faf
permissions -rw-r--r--
synced linux build
     1 /**
     2  * vim: set ts=4 :
     3  * ===============================================================
     4  * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
     5  * ===============================================================
     6  *
     7  * This file is not open source and may not be copied without explicit
     8  * written permission of AlliedModders LLC.  This file may not be redistributed 
     9  * in whole or significant part.
    10  * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
    11  *
    12  * Version: $Id$
    13  */
    14 
    15 #ifndef _INCLUDE_WINTHREADS_H_
    16 #define _INCLUDE_WINTHREADS_H_
    17 
    18 #include <windows.h>
    19 #include "IThreader.h"
    20 
    21 using namespace SourceMod;
    22 
    23 DWORD WINAPI Win32_ThreadGate(LPVOID param);
    24 
    25 class WinThreader : public IThreader
    26 {
    27 public:
    28 	class ThreadHandle : public IThreadHandle
    29 	{
    30 		friend class WinThreader;
    31 		friend DWORD WINAPI Win32_ThreadGate(LPVOID param);
    32 	public:
    33 		ThreadHandle(IThreader *parent, HANDLE hthread, IThread *run, const ThreadParams *params);
    34 		virtual ~ThreadHandle();
    35 	public:
    36 		virtual bool WaitForThread();
    37 		virtual void DestroyThis();
    38 		virtual IThreadCreator *Parent();
    39 		virtual void GetParams(ThreadParams *ptparams);
    40 		virtual ThreadPriority GetPriority();
    41 		virtual bool SetPriority(ThreadPriority prio);
    42 		virtual ThreadState GetState();
    43 		virtual bool Unpause();
    44 	protected:
    45 		IThreader *m_parent;		//Parent handle
    46 		HANDLE m_thread;			//Windows HANDLE	
    47 		ThreadParams m_params;		//Current Parameters
    48 		IThread *m_run;	//Runnable context
    49 		ThreadState m_state;		//internal state
    50 		CRITICAL_SECTION m_crit;
    51 	};
    52 	class WinMutex : public IMutex
    53 	{
    54 	public:
    55 		WinMutex(HANDLE mutex) : m_mutex(mutex)
    56 		{
    57 		};
    58 		virtual ~WinMutex();
    59 	public:
    60 		virtual bool TryLock();
    61 		virtual void Lock();
    62 		virtual void Unlock();
    63 		virtual void DestroyThis();
    64 	protected:
    65 		HANDLE m_mutex;
    66 	};
    67 	class WinEvent : public IEventSignal
    68 	{
    69 	public:
    70 		WinEvent(HANDLE event) : m_event(event)
    71 		{
    72 		};
    73 		virtual ~WinEvent();
    74 	public:
    75 		virtual void Wait();
    76 		virtual void Signal();
    77 		virtual void DestroyThis();
    78 	public:
    79 		HANDLE m_event;
    80 	};
    81 public:
    82 	IMutex *MakeMutex();
    83 	void MakeThread(IThread *pThread);
    84 	IThreadHandle *MakeThread(IThread *pThread, ThreadFlags flags);
    85 	IThreadHandle *MakeThread(IThread *pThread, const ThreadParams *params);
    86 	void GetPriorityBounds(ThreadPriority &max, ThreadPriority &min);
    87 	void ThreadSleep(unsigned int ms);
    88 	IEventSignal *MakeEventSignal();
    89 	IThreadWorker *MakeWorker(bool threaded);
    90 	void DestroyWorker(IThreadWorker *pWorker);
    91 };
    92 
    93 #if defined SM_DEFAULT_THREADER && !defined SM_MAIN_THREADER
    94 #define SM_MAIN_THREADER WinThreader;
    95 typedef class WinThreader MainThreader;
    96 #endif
    97 
    98 #endif //_INCLUDE_WINTHREADS_H_