Commit f6ad04c8 authored by Davis King's avatar Davis King

Converted the timer component into two single implementation components.

These are the timer and timer_heavy objects now.
parent 52dae74c
...@@ -5,33 +5,6 @@ ...@@ -5,33 +5,6 @@
#include "timer/timer_kernel_1.h" #include "timer/timer_kernel_1.h"
#include "timer/timer_kernel_2.h" #include "timer/timer_kernel_2.h"
#include "uintn.h"
namespace dlib
{
template <
typename T
>
class timer
{
timer() {}
public:
//----------- kernels ---------------
// kernel_1a
typedef timer_kernel_1<T>
kernel_1a;
// kernel_2a
typedef timer_kernel_2<T>
kernel_2a;
};
}
#endif // DLIB_TIMEr_ #endif // DLIB_TIMEr_
...@@ -14,7 +14,7 @@ namespace dlib ...@@ -14,7 +14,7 @@ namespace dlib
template < template <
typename T typename T
> >
class timer_kernel_1 class timer_heavy
{ {
/*! /*!
INITIAL VALUE INITIAL VALUE
...@@ -46,12 +46,12 @@ namespace dlib ...@@ -46,12 +46,12 @@ namespace dlib
typedef void (T::*af_type)(); typedef void (T::*af_type)();
timer_kernel_1( timer_heavy(
T& ao_, T& ao_,
af_type af_ af_type af_
); );
virtual ~timer_kernel_1( virtual ~timer_heavy(
); );
void clear( void clear(
...@@ -110,8 +110,8 @@ namespace dlib ...@@ -110,8 +110,8 @@ namespace dlib
uint64 next_time_to_run; uint64 next_time_to_run;
// restricted functions // restricted functions
timer_kernel_1(const timer_kernel_1<T>&); // copy constructor timer_heavy(const timer_heavy<T>&); // copy constructor
timer_kernel_1<T>& operator=(const timer_kernel_1<T>&); // assignment operator timer_heavy<T>& operator=(const timer_heavy<T>&); // assignment operator
}; };
...@@ -124,8 +124,8 @@ namespace dlib ...@@ -124,8 +124,8 @@ namespace dlib
template < template <
typename T typename T
> >
timer_kernel_1<T>:: timer_heavy<T>::
timer_kernel_1( timer_heavy(
T& ao_, T& ao_,
af_type af_ af_type af_
) : ) :
...@@ -143,8 +143,8 @@ namespace dlib ...@@ -143,8 +143,8 @@ namespace dlib
template < template <
typename T typename T
> >
timer_kernel_1<T>:: timer_heavy<T>::
~timer_kernel_1( ~timer_heavy(
) )
{ {
stop_and_wait(); stop_and_wait();
...@@ -155,7 +155,7 @@ namespace dlib ...@@ -155,7 +155,7 @@ namespace dlib
template < template <
typename T typename T
> >
void timer_kernel_1<T>:: void timer_heavy<T>::
clear( clear(
) )
{ {
...@@ -171,7 +171,7 @@ namespace dlib ...@@ -171,7 +171,7 @@ namespace dlib
template < template <
typename T typename T
> >
typename timer_kernel_1<T>::af_type timer_kernel_1<T>:: typename timer_heavy<T>::af_type timer_heavy<T>::
action_function ( action_function (
) const ) const
{ {
...@@ -183,7 +183,7 @@ namespace dlib ...@@ -183,7 +183,7 @@ namespace dlib
template < template <
typename T typename T
> >
const T& timer_kernel_1<T>:: const T& timer_heavy<T>::
action_object ( action_object (
) const ) const
{ {
...@@ -195,7 +195,7 @@ namespace dlib ...@@ -195,7 +195,7 @@ namespace dlib
template < template <
typename T typename T
> >
T& timer_kernel_1<T>:: T& timer_heavy<T>::
action_object ( action_object (
) )
{ {
...@@ -207,7 +207,7 @@ namespace dlib ...@@ -207,7 +207,7 @@ namespace dlib
template < template <
typename T typename T
> >
bool timer_kernel_1<T>:: bool timer_heavy<T>::
is_running ( is_running (
) const ) const
{ {
...@@ -220,7 +220,7 @@ namespace dlib ...@@ -220,7 +220,7 @@ namespace dlib
template < template <
typename T typename T
> >
unsigned long timer_kernel_1<T>:: unsigned long timer_heavy<T>::
delay_time ( delay_time (
) const ) const
{ {
...@@ -233,7 +233,7 @@ namespace dlib ...@@ -233,7 +233,7 @@ namespace dlib
template < template <
typename T typename T
> >
void timer_kernel_1<T>:: void timer_heavy<T>::
set_delay_time ( set_delay_time (
unsigned long milliseconds unsigned long milliseconds
) )
...@@ -257,7 +257,7 @@ namespace dlib ...@@ -257,7 +257,7 @@ namespace dlib
template < template <
typename T typename T
> >
void timer_kernel_1<T>:: void timer_heavy<T>::
start ( start (
) )
{ {
...@@ -274,10 +274,10 @@ namespace dlib ...@@ -274,10 +274,10 @@ namespace dlib
running = true; running = true;
// start the thread // start the thread
if (create_new_thread<timer_kernel_1,&timer_kernel_1::thread>(*this) == false) if (create_new_thread<timer_heavy,&timer_heavy::thread>(*this) == false)
{ {
running = false; running = false;
throw dlib::thread_error("error creating new thread in timer_kernel_1::start"); throw dlib::thread_error("error creating new thread in timer_heavy::start");
} }
} }
} }
...@@ -287,7 +287,7 @@ namespace dlib ...@@ -287,7 +287,7 @@ namespace dlib
template < template <
typename T typename T
> >
void timer_kernel_1<T>:: void timer_heavy<T>::
stop ( stop (
) )
{ {
...@@ -302,7 +302,7 @@ namespace dlib ...@@ -302,7 +302,7 @@ namespace dlib
template < template <
typename T typename T
> >
void timer_kernel_1<T>:: void timer_heavy<T>::
thread ( thread (
) )
{ {
...@@ -354,7 +354,7 @@ namespace dlib ...@@ -354,7 +354,7 @@ namespace dlib
template < template <
typename T typename T
> >
void timer_kernel_1<T>:: void timer_heavy<T>::
stop_and_wait ( stop_and_wait (
) )
{ {
......
...@@ -10,8 +10,8 @@ namespace dlib ...@@ -10,8 +10,8 @@ namespace dlib
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
timer_kernel_2_global_clock:: timer_global_clock::
timer_kernel_2_global_clock( timer_global_clock(
): ):
s(m), s(m),
shutdown(false), shutdown(false),
...@@ -21,8 +21,8 @@ namespace dlib ...@@ -21,8 +21,8 @@ namespace dlib
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
timer_kernel_2_global_clock:: timer_global_clock::
~timer_kernel_2_global_clock() ~timer_global_clock()
{ {
m.lock(); m.lock();
shutdown = true; shutdown = true;
...@@ -33,9 +33,9 @@ namespace dlib ...@@ -33,9 +33,9 @@ namespace dlib
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
void timer_kernel_2_global_clock:: void timer_global_clock::
add ( add (
timer_kernel_2_base* r timer_base* r
) )
{ {
if (r->in_global_clock == false) if (r->in_global_clock == false)
...@@ -56,7 +56,7 @@ namespace dlib ...@@ -56,7 +56,7 @@ namespace dlib
// next event in tm // next event in tm
s.signal(); s.signal();
} }
timer_kernel_2_base* rtemp = r; timer_base* rtemp = r;
uint64 ttemp = t; uint64 ttemp = t;
tm.add(ttemp,rtemp); tm.add(ttemp,rtemp);
r->next_time_to_run = t; r->next_time_to_run = t;
...@@ -66,9 +66,9 @@ namespace dlib ...@@ -66,9 +66,9 @@ namespace dlib
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
void timer_kernel_2_global_clock:: void timer_global_clock::
remove ( remove (
timer_kernel_2_base* r timer_base* r
) )
{ {
if (r->in_global_clock) if (r->in_global_clock)
...@@ -79,7 +79,7 @@ namespace dlib ...@@ -79,7 +79,7 @@ namespace dlib
if (tm.element().value() == r) if (tm.element().value() == r)
{ {
uint64 t; uint64 t;
timer_kernel_2_base* rtemp; timer_base* rtemp;
tm.remove_current_element(t,rtemp); tm.remove_current_element(t,rtemp);
r->in_global_clock = false; r->in_global_clock = false;
break; break;
...@@ -90,9 +90,9 @@ namespace dlib ...@@ -90,9 +90,9 @@ namespace dlib
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
void timer_kernel_2_global_clock:: void timer_global_clock::
adjust_delay ( adjust_delay (
timer_kernel_2_base* r, timer_base* r,
unsigned long new_delay unsigned long new_delay
) )
{ {
...@@ -117,7 +117,7 @@ namespace dlib ...@@ -117,7 +117,7 @@ namespace dlib
r->running = false; r->running = false;
r->delay = new_delay; r->delay = new_delay;
timer_kernel_2_base* rtemp = r; timer_base* rtemp = r;
uint64 ttemp = t; uint64 ttemp = t;
tm.add(ttemp,rtemp); tm.add(ttemp,rtemp);
r->next_time_to_run = t; r->next_time_to_run = t;
...@@ -135,7 +135,7 @@ namespace dlib ...@@ -135,7 +135,7 @@ namespace dlib
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
void timer_kernel_2_global_clock:: void timer_global_clock::
thread() thread()
{ {
auto_mutex M(m); auto_mutex M(m);
...@@ -155,8 +155,8 @@ namespace dlib ...@@ -155,8 +155,8 @@ namespace dlib
if (t <= cur_time + 999) if (t <= cur_time + 999)
{ {
// remove this event from the tm map // remove this event from the tm map
timer_kernel_2_base* r = tm.element().value(); timer_base* r = tm.element().value();
timer_kernel_2_base* rtemp; timer_base* rtemp;
tm.remove_current_element(t,rtemp); tm.remove_current_element(t,rtemp);
r->in_global_clock = false; r->in_global_clock = false;
...@@ -181,24 +181,24 @@ namespace dlib ...@@ -181,24 +181,24 @@ namespace dlib
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
shared_ptr_thread_safe<timer_kernel_2_global_clock> get_global_clock() shared_ptr_thread_safe<timer_global_clock> get_global_clock()
{ {
static shared_ptr_thread_safe<timer_kernel_2_global_clock> d(new timer_kernel_2_global_clock); static shared_ptr_thread_safe<timer_global_clock> d(new timer_global_clock);
return d; return d;
} }
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
// do this just to make sure get_global_clock() gets called at program startup // do this just to make sure get_global_clock() gets called at program startup
class timer_kernel_2_global_clock_helper class timer_global_clock_helper
{ {
public: public:
timer_kernel_2_global_clock_helper() timer_global_clock_helper()
{ {
get_global_clock(); get_global_clock();
} }
}; };
static timer_kernel_2_global_clock_helper call_get_global_clock; static timer_global_clock_helper call_get_global_clock;
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
......
...@@ -10,15 +10,16 @@ ...@@ -10,15 +10,16 @@
#include "../uintn.h" #include "../uintn.h"
#include "../binary_search_tree.h" #include "../binary_search_tree.h"
#include "../smart_pointers_thread_safe.h" #include "../smart_pointers_thread_safe.h"
#include "timer_kernel_1.h"
namespace dlib namespace dlib
{ {
struct timer_kernel_2_base : public threaded_object struct timer_base : public threaded_object
{ {
/*! /*!
WHAT THIS OBJECT REPRESENTS WHAT THIS OBJECT REPRESENTS
This object contains the base members of the timer_kernel_2 object. This object contains the base members of the timer object.
It exists so that we can access them from outside any templated functions. It exists so that we can access them from outside any templated functions.
!*/ !*/
...@@ -32,11 +33,11 @@ namespace dlib ...@@ -32,11 +33,11 @@ namespace dlib
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
class timer_kernel_2_global_clock : private threaded_object class timer_global_clock : private threaded_object
{ {
/*! /*!
This object sets up a timer that triggers the action function This object sets up a timer that triggers the action function
for timer_kernel_2 objects that are tracked inside this object. for timer objects that are tracked inside this object.
INITIAL VALUE INITIAL VALUE
- shutdown == false - shutdown == false
- running == false - running == false
...@@ -47,15 +48,15 @@ namespace dlib ...@@ -47,15 +48,15 @@ namespace dlib
- else (running) then - else (running) then
- thread() is running - thread() is running
- tm[time] == pointer to a timer_kernel_2_base object - tm[time] == pointer to a timer_base object
!*/ !*/
typedef binary_search_tree<uint64,timer_kernel_2_base*,memory_manager<char>::kernel_2b>::kernel_2a_c time_map; typedef binary_search_tree<uint64,timer_base*,memory_manager<char>::kernel_2b>::kernel_2a_c time_map;
public: public:
~timer_kernel_2_global_clock(); ~timer_global_clock();
void add ( void add (
timer_kernel_2_base* r timer_base* r
); );
/*! /*!
requires requires
...@@ -69,7 +70,7 @@ namespace dlib ...@@ -69,7 +70,7 @@ namespace dlib
!*/ !*/
void remove ( void remove (
timer_kernel_2_base* r timer_base* r
); );
/*! /*!
requires requires
...@@ -81,7 +82,7 @@ namespace dlib ...@@ -81,7 +82,7 @@ namespace dlib
!*/ !*/
void adjust_delay ( void adjust_delay (
timer_kernel_2_base* r, timer_base* r,
unsigned long new_delay unsigned long new_delay
); );
/*! /*!
...@@ -95,10 +96,10 @@ namespace dlib ...@@ -95,10 +96,10 @@ namespace dlib
mutex m; mutex m;
friend shared_ptr_thread_safe<timer_kernel_2_global_clock> get_global_clock(); friend shared_ptr_thread_safe<timer_global_clock> get_global_clock();
private: private:
timer_kernel_2_global_clock(); timer_global_clock();
time_map tm; time_map tm;
signaler s; signaler s;
...@@ -112,10 +113,10 @@ namespace dlib ...@@ -112,10 +113,10 @@ namespace dlib
- spawns timer tasks as is appropriate - spawns timer tasks as is appropriate
!*/ !*/
}; };
shared_ptr_thread_safe<timer_kernel_2_global_clock> get_global_clock(); shared_ptr_thread_safe<timer_global_clock> get_global_clock();
/*! /*!
ensures ensures
- returns the global instance of the timer_kernel_2_global_clock object - returns the global instance of the timer_global_clock object
!*/ !*/
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
...@@ -123,7 +124,7 @@ namespace dlib ...@@ -123,7 +124,7 @@ namespace dlib
template < template <
typename T typename T
> >
class timer_kernel_2 : private timer_kernel_2_base class timer : private timer_base
{ {
/*! /*!
INITIAL VALUE INITIAL VALUE
...@@ -150,14 +151,19 @@ namespace dlib ...@@ -150,14 +151,19 @@ namespace dlib
public: public:
// These typedefs are here for backwards compatibility with previous versions of
// dlib.
typedef timer_heavy<T> kernel_1a;
typedef timer kernel_2a;
typedef void (T::*af_type)(); typedef void (T::*af_type)();
timer_kernel_2( timer(
T& ao_, T& ao_,
af_type af_ af_type af_
); );
virtual ~timer_kernel_2( virtual ~timer(
); );
void clear( void clear(
...@@ -203,11 +209,11 @@ namespace dlib ...@@ -203,11 +209,11 @@ namespace dlib
// data members // data members
T& ao; T& ao;
const af_type af; const af_type af;
shared_ptr_thread_safe<timer_kernel_2_global_clock> gc; shared_ptr_thread_safe<timer_global_clock> gc;
// restricted functions // restricted functions
timer_kernel_2(const timer_kernel_2&); // copy constructor timer(const timer&); // copy constructor
timer_kernel_2& operator=(const timer_kernel_2&); // assignment operator timer& operator=(const timer&); // assignment operator
}; };
...@@ -220,8 +226,8 @@ namespace dlib ...@@ -220,8 +226,8 @@ namespace dlib
template < template <
typename T typename T
> >
timer_kernel_2<T>:: timer<T>::
timer_kernel_2( timer(
T& ao_, T& ao_,
af_type af_ af_type af_
) : ) :
...@@ -240,8 +246,8 @@ namespace dlib ...@@ -240,8 +246,8 @@ namespace dlib
template < template <
typename T typename T
> >
timer_kernel_2<T>:: timer<T>::
~timer_kernel_2( ~timer(
) )
{ {
clear(); clear();
...@@ -253,7 +259,7 @@ namespace dlib ...@@ -253,7 +259,7 @@ namespace dlib
template < template <
typename T typename T
> >
void timer_kernel_2<T>:: void timer<T>::
clear( clear(
) )
{ {
...@@ -269,7 +275,7 @@ namespace dlib ...@@ -269,7 +275,7 @@ namespace dlib
template < template <
typename T typename T
> >
typename timer_kernel_2<T>::af_type timer_kernel_2<T>:: typename timer<T>::af_type timer<T>::
action_function ( action_function (
) const ) const
{ {
...@@ -281,7 +287,7 @@ namespace dlib ...@@ -281,7 +287,7 @@ namespace dlib
template < template <
typename T typename T
> >
const T& timer_kernel_2<T>:: const T& timer<T>::
action_object ( action_object (
) const ) const
{ {
...@@ -293,7 +299,7 @@ namespace dlib ...@@ -293,7 +299,7 @@ namespace dlib
template < template <
typename T typename T
> >
T& timer_kernel_2<T>:: T& timer<T>::
action_object ( action_object (
) )
{ {
...@@ -305,7 +311,7 @@ namespace dlib ...@@ -305,7 +311,7 @@ namespace dlib
template < template <
typename T typename T
> >
bool timer_kernel_2<T>:: bool timer<T>::
is_running ( is_running (
) const ) const
{ {
...@@ -318,7 +324,7 @@ namespace dlib ...@@ -318,7 +324,7 @@ namespace dlib
template < template <
typename T typename T
> >
unsigned long timer_kernel_2<T>:: unsigned long timer<T>::
delay_time ( delay_time (
) const ) const
{ {
...@@ -331,7 +337,7 @@ namespace dlib ...@@ -331,7 +337,7 @@ namespace dlib
template < template <
typename T typename T
> >
void timer_kernel_2<T>:: void timer<T>::
set_delay_time ( set_delay_time (
unsigned long milliseconds unsigned long milliseconds
) )
...@@ -345,7 +351,7 @@ namespace dlib ...@@ -345,7 +351,7 @@ namespace dlib
template < template <
typename T typename T
> >
void timer_kernel_2<T>:: void timer<T>::
start ( start (
) )
{ {
...@@ -362,7 +368,7 @@ namespace dlib ...@@ -362,7 +368,7 @@ namespace dlib
template < template <
typename T typename T
> >
void timer_kernel_2<T>:: void timer<T>::
stop ( stop (
) )
{ {
...@@ -377,7 +383,7 @@ namespace dlib ...@@ -377,7 +383,7 @@ namespace dlib
template < template <
typename T typename T
> >
void timer_kernel_2<T>:: void timer<T>::
thread ( thread (
) )
{ {
...@@ -396,7 +402,7 @@ namespace dlib ...@@ -396,7 +402,7 @@ namespace dlib
template < template <
typename T typename T
> >
void timer_kernel_2<T>:: void timer<T>::
stop_and_wait ( stop_and_wait (
) )
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment