RTP Trace System  1.0
thread.h
Go to the documentation of this file.
00001 // ##########################################################################
00002 // ####                                                                  ####
00003 // ####                      RTP Audio Server Project                    ####
00004 // ####                    ============================                  ####
00005 // ####                                                                  ####
00006 // #### Thread                                                           ####
00007 // ####                                                                  ####
00008 // #### Version 1.00  --  February 16, 2001                              ####
00009 // ####                                                                  ####
00010 // #### Copyright (C) 1999  Thomas Dreibholz                             ####
00011 // ####               2000  Universität Bonn, Abt. IV                    ####
00012 // ####               2001  EMail: dreibh@iem.uni-due.de                 ####
00013 // ####                     WWW:   https://www.uni-due.de/~be0001        ####
00014 // ####                                                                  ####
00015 // ##########################################################################
00016 
00017 
00018 #ifndef THREAD_H
00019 #define THREAD_H
00020 
00021 
00022 #include "system.h"
00023 #include "synchronizable.h"
00024 
00025 
00026 #include <pthread.h>
00027 
00028 
00029 namespace Coral {
00030 
00031 
00045 class Thread : public Synchronizable
00046 {
00047    // ====== Constants ======================================================
00048    public:
00049    static const cardinal ThreadCancelAsynchronous = 0;
00050    static const cardinal ThreadCancelDeferred     = (1 << 0);
00051 
00052 
00053    // ====== Constructor/Destructor =========================================
00054    public:
00063    Thread(const cardinal flags = ThreadCancelAsynchronous);
00064    
00068    virtual ~Thread();
00069 
00070 
00071    // ====== Status =========================================================
00077    inline bool running() const;
00078 
00079    
00080    // ====== Delay ==========================================================
00089    static card64 delay(const card64 delayTimeout, const bool interruptable = false);
00090 
00091    
00092    // ====== Thread control =================================================
00098    virtual bool start();
00099    
00109    virtual void stop();
00110    
00114    cardinal join();
00115 
00119    virtual void cancel();
00120    
00130    virtual void suspend();
00131    
00135    virtual void resume();
00136 
00137    
00138    // ====== Tests for cancellation and suspension ==========================
00139    protected:
00144    virtual void testCancel();
00145    
00152    virtual bool testSuspension();
00153    
00159    inline static void exit(const cardinal result = 0);
00160 
00166    inline static void yield();
00167 
00168 
00169    // ====== run() method to be implemented by subclass =====================
00170    protected:
00175    virtual void run() = 0;
00176 
00177 
00178    // ====== Private data ===================================================
00179    protected:
00180    pthread_t       PThread;
00181 
00182 
00183    private:
00184    static void* go(void* i);
00185 
00186    
00187    private:
00188    pthread_mutex_t SuspensionMutex;
00189    cardinal        Flags;
00190    bool            IsSuspended;
00191 };
00192 
00193 
00194 }
00195 
00196 
00197 #include "thread.icc"
00198 
00199 
00200 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines