Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Namespace Members | Compound Members | File Members | Related Pages | Examples

pthread_.h

Go to the documentation of this file.
00001 /*
00002  *   P::Classes - Portable C++ Application Framework
00003  *   Copyright (C) 2000-2003  Christian Prochnow <cproch@seculogix.de>
00004  *
00005  *   This library is free software; you can redistribute it and/or
00006  *   modify it under the terms of the GNU Lesser General Public
00007  *   License as published by the Free Software Foundation; either
00008  *   version 2 of the License, or (at your option) any later version.
00009  *
00010  *   This library is distributed in the hope that it will be useful,
00011  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013  *   Lesser General Public License for more details.
00014  *
00015  *   You should have received a copy of the GNU Lesser General Public
00016  *   License along with this library; if not, write to the Free Software
00017  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00018  */
00019 
00020 #ifndef _pthread_h_
00021 #define _pthread_h_
00022 
00023 #include <pclasses/pexport.h>
00024 #include <pclasses/pexception.h>
00025 #include <pclasses/psemaphore.h>
00026 
00027 namespace P {
00028 
00030 
00034 class ThreadError: public SystemError {
00035   public:
00036     inline ThreadError(oserr_t errnum, const char* _what, const SourceInfo& _si) throw()
00037       : SystemError(errnum, _what, _si) {}
00038 
00039     inline BaseError* clone() const
00040     { return new ThreadError(*this); }
00041 
00042 };
00043 
00045 
00050 class PCORE_EXPORT Thread {
00051   public:
00053     enum state_t {
00054       Stopped,    
00055       Running,    
00056       Suspended   
00057     };
00058 
00059     Thread() throw();
00060     virtual ~Thread();
00061 
00063     void start(Semaphore* sem = 0, int prio = 0) throw(LogicError, ThreadError);
00064 
00066     bool stop(unsigned int timeout) throw(LogicError, SyncError);
00067 
00069     void kill() throw(LogicError, SystemError);
00070 
00072     bool suspend(unsigned int timeout) throw(LogicError, SyncError);
00073 
00075     void resume() throw(LogicError, SyncError);
00076 
00078     state_t state() const throw();
00079 
00081     static void yield() throw();
00082 
00084 
00090     static void sleep(unsigned int timeout) throw();
00091 
00093     static void exit() throw();
00094 
00096     static Thread* current() throw();
00097 
00098   protected:
00099     virtual bool initial() = 0;
00100     virtual void main() = 0;
00101     virtual void suspended() {};
00102     virtual void resumed() {};
00103     virtual void final() {};
00104 
00105     bool testCancel() throw(LogicError, SyncError);
00106 
00107     class Private;
00108     friend class Private;
00109 
00110     struct thread_handle_t;
00111     friend struct thread_handle_t;
00112 
00113     thread_handle_t* handle() const throw();
00114 
00115     static thread_handle_t* createHandle();
00116     static void destroyHandle(thread_handle_t* handle);
00117 
00118   private:
00119     thread_handle_t* m_handle;
00120 };
00121 
00122 }
00123 
00124 #endif

Generated on Fri Mar 12 21:08:31 2004 for P::Classes by doxygen 1.3.3