#include <Basic_PThread.hpp>
Inheritance diagram for Basic_PThread::
Public Methods | |
__inline | Basic_PThread (bool autostart=false, bool autojoin=false) |
virtual __inline | ~Basic_PThread () |
__inline pthread_t | getPID () |
virtual void | run ()=0 |
__inline void | startrel (int p) |
void | start (int start_prio=10) |
__inline void | yield () |
__inline void | stop () |
__inline void | end () |
__inline bool | isStarted () |
__inline void | join (void **value_ptr=NULL) |
__inline void | detach () |
__inline | Basic_PThread (bool autostart=false, bool autojoin=false) |
virtual __inline | ~Basic_PThread () |
__inline pthread_t | getPID () |
virtual void | run ()=0 |
void | start (int start_prio=10) |
__inline void | yield () |
__inline void | stop () |
__inline void | end () |
__inline bool | isStarted () |
__inline void | join (void **value_ptr=NULL) |
__inline void | detach () |
Static Public Methods | |
void * | Basic_PThread::Wrapper (void *ptrThis) |
void * | Basic_PThread::Wrapper (void *ptrThis) |
Protected Attributes | |
pthread_t | pid |
bool | isDetached |
pthread_attr_t | attr |
sched_param | param |
int | priority |
Private Methods | |
__inline | Basic_PThread (const Basic_PThread &src) |
__inline const Basic_PThread & | operator= (const Basic_PThread &src) |
__inline | Basic_PThread (const Basic_PThread &src) |
__inline const Basic_PThread & | operator= (const Basic_PThread &src) |
|
Definition at line 35 of file Basic_PThread.inl. Referenced by INVALID_PID().
00036 : pid( INVALID_PID ), isDetached( TRUE ) 00037 { 00038 if ( autostart ) start(); 00039 if ( autojoin ) join(); 00040 } |
|
Definition at line 43 of file Basic_PThread.inl. Referenced by INVALID_PID().
|
|
|
|
|
|
|
|
|
|
Definition at line 90 of file Basic_PThread.hpp. 00091 { 00092 Basic_PThread* me = (Basic_PThread*)ptrThis; 00093 00094 // Call the derived classes version, since the function 00095 // run is implemented by it's children 00096 me->run(); 00097 00098 // run() should contain an Infinite Loop, i.e. for(;;) { ... } 00099 // Exit beautifully, just in case there is no infinite loop. 00100 00101 me->pid = INVALID_PID; 00102 pthread_exit( NULL ); 00103 00104 return NULL; 00105 } |
|
Definition at line 89 of file Basic_PThread.hpp. 00090 { 00091 Basic_PThread* me = (Basic_PThread*)ptrThis; 00092 00093 // Call the derived classes version, since the function 00094 // run is implemented by it's children 00095 me->run(); 00096 00097 // run() should contain an Infinite Loop, i.e. for(;;) { ... } 00098 // Exit beautifully, just in case there is no infinite loop. 00099 00100 me->pid = INVALID_PID; 00101 pthread_exit( NULL ); 00102 00103 return NULL; 00104 } |
|
|
|
Definition at line 75 of file Basic_PThread.inl. 00076 { 00077 if ( pid < 0 ) return; 00078 if ( isDetached ) return; 00079 00080 int err = pthread_detach( pid ); 00081 isDetached = TRUE; 00082 00083 MC_OnError( err, Error, "An error occured while detaching a PThread." ); 00084 } |
|
|
|
Definition at line 56 of file Basic_PThread.inl. Referenced by ~Basic_PThread().
00056 { 00057 pthread_exit( NULL ); 00058 } |
|
|
|
Definition at line 60 of file Basic_PThread.inl. Referenced by INVALID_PID().
00061 { 00062 return pid; 00063 } |
|
|
|
Definition at line 65 of file Basic_PThread.inl. 00066 { 00067 return ( pid >= 0 && (signed long)pid != INVALID_PID ); 00068 } |
|
|
|
Definition at line 87 of file Basic_PThread.inl. Referenced by Basic_PThread(), and main().
00088 { 00089 int err = 0; 00090 if ( pid < 0 ) return; 00091 if ( !isDetached ) 00092 err = pthread_join( pid, value_ptr ); 00093 00094 isDetached = FALSE; 00095 MC_OnError( err, Error, "An error occured while joining a PThread." ); 00096 } |
|
|
|
Referenced by INVALID_PID().
|
|
Reimplemented in Timer, Fred, Producer, Consumer, Fred, Reader, my_timer, TimerPulse, DataFactory, FileFactory, TFTP_Sender, Timer, and Fred. |
|
Reimplemented in Timer, Fred, Producer, Consumer, Fred, Reader, my_timer, TimerPulse, DataFactory, FileFactory, TFTP_Sender, Timer, and Fred. Referenced by Basic_PThread::Wrapper(), and INVALID_PID().
|
|
|
|
Definition at line 33 of file Basic_PThread.cpp. Referenced by Basic_PThread(), main(), TimerPulseTest::start(), and startrel().
00034 { 00035 if ( pid >= 0 && (signed long)pid != INVALID_PID ) return; 00036 00037 memset( &attr, 0, sizeof( attr ) ); 00038 memset( ¶m, 0, sizeof( param ) ); 00039 00040 register int rc = EOK; 00041 00042 rc = pthread_attr_init( &attr ); 00043 MC_OnError( rc, Error, "while initializing a basic pthread attribute." ) 00044 00045 rc = pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_DETACHED ); 00046 MC_OnError( rc, Error, "while setting a basic pthread attribute to detached." ) 00047 00048 rc = pthread_attr_setscope( &attr, PTHREAD_SCOPE_SYSTEM ); 00049 MC_OnError( rc, Error, "while setting a basic pthread attribute to system scope." ) 00050 00051 rc = pthread_attr_setinheritsched( &attr, PTHREAD_EXPLICIT_SCHED ); 00052 MC_OnError( rc, Error, "while setting a basic pthread attribute to explicit scheduling." ) 00053 00054 priority = start_prio; 00055 attr.param.sched_priority = start_prio; 00056 00057 rc = pthread_attr_setschedpolicy( &attr, SCHED_RR ); 00058 MC_OnError( rc, Error, "while setting a this pthread parameter to Round-Robin." ) 00059 00060 // Call the static Wrapper() which will call the dynamic run() 00061 rc = pthread_create( &pid, &attr, Wrapper, (void*)this ); 00062 00063 if ( rc == -1 ) { 00064 printf( "Forgot to include libraries:" 00065 "g++ -lpthread -lrt -lsocket -lnsl -g Basic_PThread.cpp" ); 00066 } 00067 00068 MC_OnError( rc, Error, "while starting a basic pthread." ) 00069 00070 pthread_detach( pid ); 00071 00072 // pthread_exit( NULL ); 00073 } |
|
Definition at line 107 of file Basic_PThread.hpp. 00107 { 00108 start( getprio( 0 ) + p ); 00109 } |
|
Reimplemented in TimerPulse. |
|
Reimplemented in TimerPulse. Definition at line 49 of file Basic_PThread.inl. Referenced by ~Basic_PThread().
00049 { 00050 if ( pid < 0 ) return; 00051 00052 pthread_cancel( pid ); 00053 pid = INVALID_PID; 00054 } |
|
|
|
Definition at line 70 of file Basic_PThread.inl. 00071 { 00072 sched_yield(); 00073 } |
|
Definition at line 137 of file Basic_PThread.hpp. |
|
Definition at line 136 of file Basic_PThread.hpp. |
|
Definition at line 138 of file Basic_PThread.hpp. |
|
Definition at line 135 of file Basic_PThread.hpp. Referenced by Basic_PThread::Wrapper().
|
|
Definition at line 139 of file Basic_PThread.hpp. |