GenericThread.hGo to the documentation of this file.00001 /* 00002 * Copyright (c) 2000-2003 Barak Weichselbaum <barak@komodia.com> 00003 * All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, with or without 00006 * modification, are permitted provided that the following conditions 00007 * are met: 00008 * 1. Redistributions of source code must retain the above copyright 00009 * notice, this list of conditions and the following disclaimer. 00010 * 2. Redistributions in binary form must reproduce the above copyright 00011 * notice, this list of conditions and the following disclaimer in the 00012 * documentation and/or other materials provided with the distribution. 00013 * 00014 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 00015 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00016 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00017 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 00018 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00019 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 00020 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00021 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00022 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 00023 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 00024 * SUCH DAMAGE. 00025 * 00026 * Contact info: 00027 * ------------- 00028 * 00029 * Site: http://www.komodia.com 00030 * Main contact: barak@komodia.com 00031 * For custom projects, 00032 * consulting, or other 00033 * paid services: sales@komodia.com 00034 */ 00035 00036 #if !defined(AFX_GENERICTHREAD_H__6DE35F78_E78B_4B37_BF46_A75D1FC3A1F8__INCLUDED_) 00037 #define AFX_GENERICTHREAD_H__6DE35F78_E78B_4B37_BF46_A75D1FC3A1F8__INCLUDED_ 00038 00039 #if _MSC_VER > 1000 00040 #pragma once 00041 #endif // _MSC_VER > 1000 00042 00043 #include "ErrorHandler.h" 00044 #include "GenericCriticalSection.h" 00045 #include "KomodiaSettings.h" 00046 00047 KOMODIA_NAMESPACE_START 00048 00049 #define THREAD_DO_NOTHING_EXIT_VALUE 0xffffffff 00050 00051 class CGenericThread : public CErrorHandler 00052 { 00053 public: 00054 //Our thread proc 00055 typedef DWORD (*GenericThreadProc)(LPVOID pParam); 00056 typedef GenericThreadProc LPGenericThreadProc; 00057 00058 //Thread status 00059 typedef enum _ThreadStatus 00060 { 00061 tsSuspended, 00062 tsRunning, 00063 tsStopped, 00064 tsError 00065 } ThreadStatus; 00066 00067 //Thread priority 00068 typedef enum _ThreadPriority 00069 { 00070 tpIdle=0, 00071 tpLowest, 00072 tpBelowNormal, 00073 tpNormal, 00074 tpAboveNormal, 00075 tpHighest, 00076 tpTimeCritical 00077 } ThreadPriority; 00078 public: 00079 //Are we in the thread 00080 virtual BOOL IsInThread()const=0; 00081 00082 //Set brute termination status 00083 //Affects when can't stop thread, will be brutely terminated 00084 //Default is TRUE 00085 void SetBruteTermination(BOOL bBrute); 00086 00087 //Set autodelete status 00088 //Affects when thread stops, it will be automaticall deleted 00089 //Default is FALSE 00090 void SetAutoDelete(BOOL bAuto); 00091 00092 //Set the thread priority 00093 //(must be set before Start) 00094 virtual BOOL SetPriority(ThreadPriority aPriority)=0; 00095 00096 //Get the thread priority 00097 virtual ThreadPriority GetPriority()const=0; 00098 00099 //Start the thread 00100 //pData - Custome user data to pass to the thread 00101 virtual BOOL Start(LPVOID pData); 00102 00103 //Terminate the thread 00104 virtual BOOL Stop()=0; 00105 00106 //Get the thread ID 00107 virtual DWORD GetThreadID()const; 00108 00109 //Get our thread status 00110 ThreadStatus GetThreadStatus()const; 00111 00112 //Ctor and Dtor 00113 //pThreadProc - The thread proc to use 00114 CGenericThread(LPGenericThreadProc pThreadProc); 00115 virtual ~CGenericThread(); 00116 protected: 00117 //Get brute termination 00118 BOOL GetBruteTermination()const; 00119 00120 //Should we auto delete 00121 BOOL GetAutoDelete()const; 00122 00123 //Get the thread proc 00124 LPGenericThreadProc GetThreadProc()const; 00125 00126 //Set our thread status 00127 void SetThreadStatus(ThreadStatus aStatus); 00128 00129 //Get the saved data 00130 virtual LPVOID GetData()const; 00131 00132 //Set the thread ID 00133 void SetThreadID(DWORD dwThreadID); 00134 private: 00135 //No copy ctor 00136 CGenericThread(const CGenericThread& rThread); 00137 00138 //No assignment operator 00139 CGenericThread& operator=(const CGenericThread& rThread); 00140 00141 //Our thread status 00142 ThreadStatus m_aThreadStatus; 00143 00144 //Our critical section 00145 CGenericCriticalSection* m_pCSection; 00146 00147 //Auto delete ? 00148 BOOL m_bAutoDelete; 00149 00150 //Do we allow brute termination ? 00151 BOOL m_bBruteTermination; 00152 00153 //Our thread proc 00154 LPGenericThreadProc m_pThreadProc; 00155 00156 //The thread ID 00157 DWORD m_dwThreadID; 00158 00159 //Our data 00160 LPVOID m_pData; 00161 }; 00162 00163 KOMODIA_NAMESPACE_END 00164 00165 #endif // !defined(AFX_GENERICTHREAD_H__6DE35F78_E78B_4B37_BF46_A75D1FC3A1F8__INCLUDED_) |