#ifndef STK_THREAD_H #define STK_THREAD_H #include "Stk.h" #if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__)) #include #define THREAD_TYPE typedef pthread_t THREAD_HANDLE; typedef void * THREAD_RETURN; typedef void * (*THREAD_FUNCTION)(void *); #elif defined(__OS_WINDOWS__) #include #include #define THREAD_TYPE __stdcall typedef unsigned long THREAD_HANDLE; typedef unsigned THREAD_RETURN; typedef unsigned (__stdcall *THREAD_FUNCTION)(void *); #endif namespace stk { /***************************************************/ /*! \class Thread \brief STK thread class. This class provides a uniform interface for cross-platform threads. On unix systems, the pthread library is used. Under Windows, the C runtime threadex functions are used. Each instance of the Thread class can be used to control a single thread process. Routines are provided to signal cancelation and/or joining with a thread, though it is not possible for this class to know the running status of a thread once it is started. For cross-platform compatability, thread functions should be declared as follows: THREAD_RETURN THREAD_TYPE thread_function(void *ptr) by Perry R. Cook and Gary P. Scavone, 1995-2011. */ /***************************************************/ class Thread : public Stk { public: //! Default constructor. Thread(); //! The class destructor does not attempt to cancel or join a thread. ~Thread(); //! Begin execution of the thread \e routine. Upon success, true is returned. /*! A data pointer can be supplied to the thread routine via the optional \e ptr argument. If the thread cannot be created, the return value is false. */ bool start( THREAD_FUNCTION routine, void * ptr = NULL ); //! Signal cancellation of a thread routine, returning \e true on success. /*! This function only signals thread cancellation. It does not wait to verify actual routine termination. A \e true return value only signifies that the cancellation signal was properly executed, not thread cancellation. A thread routine may need to make use of the testCancel() function to specify a cancellation point. */ bool cancel(void); //! Block the calling routine indefinitely until the thread terminates. /*! This function suspends execution of the calling routine until the thread has terminated. It will return immediately if the thread was already terminated. A \e true return value signifies successful termination. A \e false return value indicates a problem with the wait call. */ bool wait(void); //! Create a cancellation point within a thread routine. /*! This function call checks for thread cancellation, allowing the thread to be terminated if a cancellation request was previously signaled. */ void testCancel(void); protected: THREAD_HANDLE thread_; }; } // stk namespace #endif