#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. |
1.2.11.1 written by Dimitri van Heesch,
© 1997-2001