1 // excerpts from http://code.google.com/p/muduo/
2 //
3 // Use of this source code is governed by a BSD-style license
4 // that can be found in the License file.
5 //
6 // Author: Shuo Chen (chenshuo at chenshuo dot com)
7 
8 #ifndef MUDUO_NET_TIMER_H
9 #define MUDUO_NET_TIMER_H
10 
11 #include <boost/noncopyable.hpp>
12 
13 #include "datetime/Timestamp.h"
14+#include "thread/Atomic.h"
15 #include "Callbacks.h"
16 
17 namespace muduo
18 {
19 
20 ///
21 /// Internal class for timer event.
22 ///
23 class Timer : boost::noncopyable
24 {
25  public:
26   Timer(const TimerCallback& cb, Timestamp when, double interval)
27     : callback_(cb),
28       expiration_(when),
29       interval_(interval),
30       repeat_(interval > 0.0),
31+      sequence_(s_numCreated_.incrementAndGet())
32   {
33   }
34 
35   void run() const
36   {
37     callback_();
38   }
39 
40   Timestamp expiration() const  { return expiration_; }
41   bool repeat() const { return repeat_; }
42+  int64_t sequence() const { return sequence_; }
43 
44   void restart(Timestamp now);
45 
46  private:
47   const TimerCallback callback_;
48   Timestamp expiration_;
49   const double interval_;
50   const bool repeat_;
51+  const int64_t sequence_;
52+
53+  static AtomicInt64 s_numCreated_;
54 };
55 
56 }
57 #endif  // MUDUO_NET_TIMER_H
58