blocxx
TimeoutTimer.hpp
Go to the documentation of this file.
1/*******************************************************************************
2* Copyright (C) 2005, Vintela, Inc. All rights reserved.
3* Copyright (C) 2006, Novell, Inc. All rights reserved.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7*
8* * Redistributions of source code must retain the above copyright notice,
9* this list of conditions and the following disclaimer.
10* * Redistributions in binary form must reproduce the above copyright
11* notice, this list of conditions and the following disclaimer in the
12* documentation and/or other materials provided with the distribution.
13* * Neither the name of
14* Vintela, Inc.,
15* nor Novell, Inc.,
16* nor the names of its contributors or employees may be used to
17* endorse or promote products derived from this software without
18* specific prior written permission.
19*
20* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30* POSSIBILITY OF SUCH DAMAGE.
31*******************************************************************************/
32
33
37
38#ifndef BLOCXX_TIMEOUT_TIMER_HPP_INCLUDE_GUARD_
39#define BLOCXX_TIMEOUT_TIMER_HPP_INCLUDE_GUARD_
40
41#include "blocxx/BLOCXX_config.h"
42#include "blocxx/CommonFwd.hpp"
43#include "blocxx/Timeout.hpp"
44#include "blocxx/DateTime.hpp"
45
46#ifdef BLOCXX_HAVE_SYS_TIME_H
47#include <sys/time.h> // for timeval
48#endif
49#include <time.h> // for timespec
50
51namespace BLOCXX_NAMESPACE
52{
53
75class BLOCXX_COMMON_API TimeoutTimer
76{
77public:
78 TimeoutTimer(const Timeout& x);
79 virtual ~TimeoutTimer();
80
87 void start();
88
95 void resetOnLoop();
96
102 void loop();
103
107 bool expired() const;
108
112 bool infinite() const;
113
114#ifdef BLOCXX_HAVE_STRUCT_TIMEVAL
115 // return 0 for infinite, otherwise a pointer to tv, and tv will be modified to contain an interval suitable for use with select().
116 ::timeval* asTimeval(::timeval& tv, double maxSeconds) const;
117 // return 0 for infinite, otherwise a pointer to tv, and tv will be modified to contain an interval suitable for use with select().
118 ::timeval* asTimeval(::timeval& tv) const;
119#endif
120
121#ifdef BLOCXX_HAVE_STRUCT_TIMESPEC
122 // fills out ts and returns the address of it.
123 ::timespec* asTimespec(::timespec& ts) const;
124#endif
125
126 Timeout asTimeout() const;
128 Timeout asRelativeTimeout(double maxSeconds) const;
134
135#ifdef BLOCXX_WIN32
136 // returns INFINITE for an infinite timeout.
137 ::DWORD asDWORDMs() const;
138#endif
139
140 // returns -1 for infinite
141 int asIntMs() const;
142 int asIntMs(double maxSeconds) const;
143
144private:
145
146 double calcSeconds() const;
147 double calcSeconds(double maxSeconds) const;
148
149 // for test purposes, the current time can be faked by a derived class.
150 virtual DateTime getCurrentTime() const;
151
155};
156
157} // end namespace BLOCXX_NAMESPACE
158
159#endif
160
161
162
The DateTime class is an abstraction for date time data.
Definition DateTime.hpp:81
A timeout can be absolute, which means that it will happen at the specified DateTime.
Definition Timeout.hpp:56
bool expired() const
Indicates whether the last loop time has exceeded the timeout.
void start()
Meant to be called by timeout functions which loop.
void loop()
Meant to be called by timeout functions which loop, but don't want to reset the interval.
Timeout asAbsoluteTimeout() const
Converts the timer to an absolute timeout.
virtual DateTime getCurrentTime() const
void resetOnLoop()
Meant to be called by timeout functions which loop, and that want to reset the interval.
bool infinite() const
Indicates whether the timeout will never expire.
Taken from RFC 1321.