dlib C++ Library - thread_function_extension_abstract.h

    // Copyright (C) 2007  Davis E. King (davisking@users.sourceforge.net)
    // License: Boost Software License   See LICENSE.txt for the full license.
    #undef DLIB_THREAD_FUNCTIOn_ABSTRACT_
    #ifdef DLIB_THREAD_FUNCTIOn_ABSTRACT_

    #include "threads_kernel_abstract.h"

    namespace dlib
    {

    // ----------------------------------------------------------------------------------------

        class thread_function
        {
            /*!
                WHAT THIS OBJECT REPRESENTS
                    This object represents a thread on a global C++ function.  That is,
                    it allows you to run a global function in its own thread.
            !*/
        public:

            template <typename T>
            thread_function (
                const T& funct
            );
            /*!
                ensures
                    - #*this is properly initialized
                    - the function object funct has been started in its own thread
                throws
                    - std::bad_alloc
                    - dlib::thread_error
                        the constructor may throw this exception if there is a problem
                        gathering resources to create threading objects.
            !*/

            thread_function (
                void (*funct)()
            );
            /*!
                ensures
                    - #*this is properly initialized
                    - the function pointed to by funct has been started in its own thread
                throws
                    - std::bad_alloc
                    - dlib::thread_error
                        the constructor may throw this exception if there is a problem
                        gathering resources to create threading objects.
            !*/

            template <typename T>
            thread_function (
                void (*funct)(T),
                T arg
            );
            /*!
                ensures
                    - #*this is properly initialized
                    - the function pointed to by funct has been started in its own thread and
                      passed the argument arg
                throws
                    - std::bad_alloc
                    - dlib::thread_error
                        the constructor may throw this exception if there is a problem
                        gathering resources to create threading objects.
            !*/

            ~thread_function (
            );
            /*!
                ensures
                    - all resources allocated by *this have been freed.
                    - blocks until is_alive() == false
            !*/

            bool is_alive (
            ) const;
            /*!
                ensures
                    - if (this object's thread has yet to terminate) then
                        - returns true
                    - else
                        - returns false
            !*/

            void wait (
            ) const;
            /*!
                ensures
                    - if (is_alive() == true) then
                        - blocks until this object's thread terminates
            !*/

        private:

            // restricted functions
            thread_function(thread_function&);        // copy constructor
            thread_function& operator=(thread_function&);    // assignment operator
        };

    // ----------------------------------------------------------------------------------------

    }

    #endif // DLIB_THREAD_FUNCTIOn_ABSTRACT_