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 //Set brute termination status 00080 //Affects when can't stop thread, will be brutely terminated 00081 //Default is TRUE 00082 void SetBruteTermination(BOOL bBrute); 00083 00084 //Set autodelete status 00085 //Affects when thread stops, it will be automaticall deleted 00086 //Default is FALSE 00087 void SetAutoDelete(BOOL bAuto); 00088 00089 //Set the thread priority 00090 //(must be set before Start) 00091 virtual BOOL SetPriority(ThreadPriority aPriority)=0; 00092 00093 //Get the thread priority 00094 virtual ThreadPriority GetPriority()const=0; 00095 00096 //Start the thread 00097 //pData - Custome user data to pass to the thread 00098 virtual BOOL Start(LPVOID pData); 00099 00100 //Terminate the thread 00101 virtual BOOL Stop()=0; 00102 00103 //Get the thread ID 00104 virtual DWORD GetThreadID()const; 00105 00106 //Get our thread status 00107 ThreadStatus GetThreadStatus()const; 00108 00109 //Ctor and Dtor 00110 //pThreadProc - The thread proc to use 00111 CGenericThread(LPGenericThreadProc pThreadProc); 00112 virtual ~CGenericThread(); 00113 protected: 00114 //Get brute termination 00115 BOOL GetBruteTermination()const; 00116 00117 //Should we auto delete 00118 BOOL GetAutoDelete()const; 00119 00120 //Get the thread proc 00121 LPGenericThreadProc GetThreadProc()const; 00122 00123 //Set our thread status 00124 void SetThreadStatus(ThreadStatus aStatus); 00125 00126 //Get the saved data 00127 virtual LPVOID GetData()const; 00128 00129 //Our thread proc 00130 LPGenericThreadProc m_pThreadProc; 00131 00132 //The thread ID 00133 DWORD m_dwThreadID; 00134 00135 //Our data 00136 LPVOID m_pData; 00137 private: 00138 //No copy ctor 00139 CGenericThread(const CGenericThread& rThread); 00140 00141 //No assignment operator 00142 CGenericThread& operator=(const CGenericThread& rThread); 00143 00144 //Our thread status 00145 ThreadStatus m_aThreadStatus; 00146 00147 //Our critical section 00148 CGenericCriticalSection* m_pCSection; 00149 00150 //Auto delete ? 00151 BOOL m_bAutoDelete; 00152 00153 //Do we allow brute termination ? 00154 BOOL m_bBruteTermination; 00155 }; 00156 00157 KOMODIA_NAMESPACE_END 00158 00159 #endif // !defined(AFX_GENERICTHREAD_H__6DE35F78_E78B_4B37_BF46_A75D1FC3A1F8__INCLUDED_) |