You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
concurrentqueue/benchmarks/dlib/timer/timer_abstract.h

191 lines
5.7 KiB
C++

// Copyright (C) 2005 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#undef DLIB_TIMER_KERNEl_ABSTRACT_
#ifdef DLIB_TIMER_KERNEl_ABSTRACT_
#include "../threads.h"
namespace dlib
{
template <
typename T
>
class timer
{
/*!
INITIAL VALUE
is_running() == false
delay_time() == 1000
action_object() == The object that is passed into the constructor
action_function() == The member function pointer that is passed to
the constructor.
WHAT THIS OBJECT REPRESENTS
This object represents a timer that will call a given member function
(the action function) repeatedly at regular intervals and in its own
thread.
Note that the delay_time() is measured in milliseconds but you are not
guaranteed to have that level of resolution. The actual resolution
is implementation dependent.
THREAD SAFETY
All methods of this class are thread safe.
!*/
public:
typedef void (T::*af_type)();
timer (
T& ao,
af_type af
);
/*!
requires
- af does not throw
ensures
- does not block.
- #*this is properly initialized
- #action_object() == ao
- #action_function() == af
(af is a member function pointer to a member in the class T)
throws
- std::bad_alloc
- dlib::thread_error
!*/
virtual ~timer (
);
/*!
requires
- is not called from inside the action_function()
ensures
- any resources associated with *this have been released
- will not call the action_function() anymore.
- if (the action function is currently executing) then
- blocks until it finishes
!*/
void clear(
);
/*!
ensures
- #*this has its initial value
- does not block
throws
- std::bad_alloc or dlib::thread_error
If either of these exceptions are thrown then #*this is unusable
until clear() is called and succeeds.
!*/
af_type action_function (
) const;
/*!
ensures
- does not block.
- returns a pointer to the member function of action_object() that is
called by *this.
!*/
const T& action_object (
) const;
/*!
ensures
- does not block.
- returns a const reference to the object used to call the member
function pointer action_function()
!*/
T& action_object (
);
/*!
ensures
- does not block.
- returns a non-const reference to the object used to call the member
function pointer action_function()
!*/
bool is_running (
) const;
/*!
ensures
- does not block.
- if (*this is currently scheduled to call the action_function()) then
- returns true
- else
- returns false
!*/
unsigned long delay_time (
) const;
/*!
ensures
- does not block.
- returns the amount of time, in milliseconds, that *this will wait between
the return of one call to the action_function() and the beginning of the
next call to the action_function().
!*/
void set_delay_time (
unsigned long milliseconds
);
/*!
ensures
- does not block.
- #delay_time() == milliseconds
throws
- std::bad_alloc or dlib::thread_error
If either of these exceptions are thrown then #is_running() == false
but otherwise this function succeeds
!*/
void start (
);
/*!
ensures
- does not block.
- if (is_running() == false) then
- #is_running() == true
- The action_function() will run in another thread.
- The first call to the action_function() will occur in roughly
delay_time() milliseconds.
- else
- this call to start() has no effect
throws
- dlib::thread_error or std::bad_alloc
If this exception is thrown then #is_running() == false but
otherwise this call to start() has no effect.
!*/
void stop (
);
/*!
ensures
- #is_running() == false
- does not block.
!*/
void stop_and_wait (
);
/*!
ensures
- #is_running() == false
- if (the action function is currently executing) then
- blocks until it finishes
!*/
private:
// restricted functions
timer(const timer<T>&); // copy constructor
timer<T>& operator=(const timer<T>&); // assignment operator
};
}
#endif // DLIB_TIMER_KERNEl_ABSTRACT_