CrystalSpace

Public API Reference

iutil/threadmanager.h
00001 /*
00002   Copyright (C) 2008 by Michael Gist
00003 
00004   This library is free software; you can redistribute it and/or
00005   modify it under the terms of the GNU Lesser General Public
00006   License as published by the Free Software Foundation; either
00007   version 2 of the License, or (at your option) any later version.
00008 
00009   This library is distributed in the hope that it will be useful,
00010   but WITHOUT ANY WARRANTY; without even the implied warranty of
00011   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012   Library General Public License for more details.
00013 
00014   You should have received a copy of the GNU Library General Public
00015   License along with this library; if not, write to the Free
00016   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00017 */
00018 
00019 #ifndef __CS_IUTIL_THREADMANAGER_H__
00020 #define __CS_IUTIL_THREADMANAGER_H__
00021 
00022 #include "csutil/refcount.h"
00023 #include "csutil/refarr.h"
00024 #include "csutil/threading/condition.h"
00025 #include "csutil/threading/mutex.h"
00026 
00027 struct iConfigManager;
00028 struct iJob;
00029 
00030 struct iThreadReturn : public virtual iBase
00031 {
00032   SCF_INTERFACE(iThreadReturn, 1, 2, 0);
00033 
00034   virtual bool IsFinished() = 0;
00035   virtual bool WasSuccessful() = 0;
00036   virtual void* GetResultPtr() = 0;
00037   virtual csRef<iBase> GetResultRefPtr() = 0;
00038 
00039   virtual void MarkFinished() = 0;
00040   virtual void MarkSuccessful() = 0;
00041   virtual void SetResult(void* result) = 0;
00042   virtual void SetResult(csRef<iBase> result) = 0;
00043 
00044   virtual void Copy(iThreadReturn* other) = 0;
00045 
00046   virtual void Wait(bool process = true) = 0;
00047   virtual void SetWaitPtrs(CS::Threading::Condition* c, CS::Threading::Mutex* m) = 0;
00048 
00049   virtual void SetJob(iJob* job) = 0;
00050   virtual iJob* GetJob() const = 0;
00051 };
00052 
00053 enum QueueType
00054 {
00055   THREADED = 0,
00056   THREADEDL,
00057   HIGH,
00058   MED,
00059   LOW
00060 };
00061 
00073 struct iThreadManager : public virtual iBase
00074 {
00075   SCF_INTERFACE(iThreadManager, 3, 0, 1);
00076 
00077   virtual void Init(iConfigManager* config) = 0;
00078   virtual void Process(uint num = 1) = 0;
00079   virtual void PushToQueue(QueueType queueType, iJob* job) = 0;
00080   virtual bool Wait(csRefArray<iThreadReturn>& threadReturns, bool process = true) = 0;
00081   virtual bool RunNow(QueueType queueType, bool wait, bool forceQueue) = 0;
00082   virtual int32 GetThreadCount() = 0;
00083   virtual void SetAlwaysRunNow(bool v) = 0;
00084   virtual bool GetAlwaysRunNow() = 0;
00085   virtual bool Exiting() = 0;
00087   virtual void ProcessAll () = 0;
00088 };
00089 
00090 // Interface macros
00091 #define THREADED_INTERFACE(function) \
00092   virtual csRef<iThreadReturn> function() = 0; \
00093   virtual csRef<iThreadReturn> function##Wait() = 0
00094 
00095 #define THREADED_INTERFACE1(function, arg1) \
00096   virtual csRef<iThreadReturn> function(arg1) = 0; \
00097   virtual csRef<iThreadReturn> function##Wait(arg1) = 0
00098 
00099 #define THREADED_INTERFACE2(function, arg1, arg2) \
00100   virtual csRef<iThreadReturn> function(arg1, arg2) = 0; \
00101   virtual csRef<iThreadReturn> function##Wait(arg1, arg2) = 0
00102 
00103 #define THREADED_INTERFACE3(function, arg1, arg2, arg3) \
00104   virtual csRef<iThreadReturn> function(arg1, arg2, arg3) = 0; \
00105   virtual csRef<iThreadReturn> function##Wait(arg1, arg2, arg3) = 0
00106 
00107 #define THREADED_INTERFACE4(function, arg1, arg2, arg3, arg4) \
00108   virtual csRef<iThreadReturn> function(arg1, arg2, arg3, arg4) = 0; \
00109   virtual csRef<iThreadReturn> function##Wait(arg1, arg2, arg3, arg4) = 0
00110 
00111 #define THREADED_INTERFACE5(function, arg1, arg2, arg3, arg4, arg5) \
00112   virtual csRef<iThreadReturn> function(arg1, arg2, arg3, arg4, arg5) = 0; \
00113   virtual csRef<iThreadReturn> function##Wait(arg1, arg2, arg3, arg4, arg5) = 0
00114 
00115 #define THREADED_INTERFACE6(function, arg1, arg2, arg3, arg4, arg5, arg6) \
00116   virtual csRef<iThreadReturn> function(arg1, arg2, arg3, arg4, arg5, arg6) = 0; \
00117   virtual csRef<iThreadReturn> function##Wait(arg1, arg2, arg3, arg4, arg5, arg6) = 0
00118 
00119 #define THREADED_INTERFACE7(function, arg1, arg2, arg3, arg4, arg5, arg6, arg7) \
00120   virtual csRef<iThreadReturn> function(arg1, arg2, arg3, arg4, arg5, arg6, arg7) = 0; \
00121   virtual csRef<iThreadReturn> function##Wait(arg1, arg2, arg3, arg4, arg5, arg6, arg7) = 0
00122 
00123 #define THREADED_INTERFACE8(function, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) \
00124   virtual csRef<iThreadReturn> function(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) = 0; \
00125   virtual csRef<iThreadReturn> function##Wait(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) = 0
00126 
00127 #define THREADED_INTERFACE9(function, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) \
00128   virtual csRef<iThreadReturn> function(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) = 0; \
00129   virtual csRef<iThreadReturn> function##Wait(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) = 0
00130 
00131 #define THREADED_INTERFACE10(function, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) \
00132   virtual csRef<iThreadReturn> function(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) = 0; \
00133   virtual csRef<iThreadReturn> function##Wait(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) = 0
00134 
00135 #define THREADED_INTERFACE11(function, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11) \
00136   virtual csRef<iThreadReturn> function(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11) = 0; \
00137   virtual csRef<iThreadReturn> function##Wait(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11) = 0
00138 
00139 #define THREADED_INTERFACE12(function, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12) \
00140   virtual csRef<iThreadReturn> function(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12) = 0; \
00141   virtual csRef<iThreadReturn> function##Wait(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12) = 0
00142 
00143 #define THREADED_INTERFACE13(function, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13) \
00144   virtual csRef<iThreadReturn> function(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13) = 0; \
00145   virtual csRef<iThreadReturn> function##Wait(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13) = 0
00146 
00147 #define THREADED_INTERFACE14(function, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14) \
00148   virtual csRef<iThreadReturn> function(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14) = 0; \
00149   virtual csRef<iThreadReturn> function##Wait(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14) = 0
00150 
00151 #define THREADED_INTERFACE15(function, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15) \
00152   virtual csRef<iThreadReturn> function(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15) = 0; \
00153   virtual csRef<iThreadReturn> function##Wait(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15) = 0
00154 
00155 #endif // __CS_IUTIL_THREADMANAGER_H__

Generated for Crystal Space 2.0 by doxygen 1.7.6.1