// 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_