diff -r c7b4237fff50 -r 03a67e41afbc core/thread/BaseWorker.h --- a/core/thread/BaseWorker.h Fri Mar 28 06:21:34 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ -/** - * vim: set ts=4 : - * ============================================================================= - * SourceMod - * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. - * ============================================================================= - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU General Public License, version 3.0, as published by the - * Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along with - * this program. If not, see . - * - * As a special exception, AlliedModders LLC gives you permission to link the - * code of this program (as well as its derivative works) to "Half-Life 2," the - * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software - * by the Valve Corporation. You must obey the GNU General Public License in - * all respects for all other code used. Additionally, AlliedModders LLC grants - * this exception to all derivative works. AlliedModders LLC defines further - * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), - * or . - * - * Version: $Id$ - */ - -#ifndef _INCLUDE_SOURCEMOD_BASEWORKER_H -#define _INCLUDE_SOURCEMOD_BASEWORKER_H - -#include "sh_list.h" -#include "ThreadSupport.h" - -#define SM_DEFAULT_THREADS_PER_FRAME 1 - -class BaseWorker; - -//SW = Simple Wrapper -class SWThreadHandle : public IThreadHandle -{ - friend class BaseWorker; -public: - SWThreadHandle(IThreadCreator *parent, const ThreadParams *p, IThread *thread); - IThread *GetThread(); -public: - //NOTE: We don't support this by default. - //It's specific usage that'd require many mutexes - virtual bool WaitForThread(); -public: - virtual void DestroyThis(); - virtual IThreadCreator *Parent(); - virtual void GetParams(ThreadParams *ptparams); -public: - //Priorities not supported by default. - virtual ThreadPriority GetPriority(); - virtual bool SetPriority(ThreadPriority prio); -public: - virtual ThreadState GetState(); - virtual bool Unpause(); -private: - ThreadState m_state; - ThreadParams m_params; - IThreadCreator *m_parent; - IThread *pThread; -}; - -class BaseWorker : public IThreadWorker -{ -public: - BaseWorker(IThreadWorkerCallbacks *hooks); - virtual ~BaseWorker(); -public: //IWorker - virtual unsigned int RunFrame(); - //Controls the worker - virtual bool Pause(); - virtual bool Unpause(); - virtual bool Start(); - virtual bool Stop(bool flush_cancel); - //Flushes out any remaining threads - virtual unsigned int Flush(bool flush_cancel); - //returns status and number of threads in queue - virtual WorkerState GetStatus(unsigned int *numThreads); -public: //IThreadCreator - virtual void MakeThread(IThread *pThread); - virtual IThreadHandle *MakeThread(IThread *pThread, ThreadFlags flags); - virtual IThreadHandle *MakeThread(IThread *pThread, const ThreadParams *params); - virtual void GetPriorityBounds(ThreadPriority &max, ThreadPriority &min); -public: //BaseWorker - virtual void AddThreadToQueue(SWThreadHandle *pHandle); - virtual SWThreadHandle *PopThreadFromQueue(); - virtual void SetMaxThreadsPerFrame(unsigned int threads); - virtual unsigned int GetMaxThreadsPerFrame(); -protected: - SourceHook::List m_ThreadQueue; - unsigned int m_perFrame; - volatile WorkerState m_state; - IThreadWorkerCallbacks *m_pHooks; -}; - -#endif //_INCLUDE_SOURCEMOD_BASEWORKER_H