/usr/include/dlib/timeout/timeout_abstract.h is in libdlib-dev 18.18-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 | // Copyright (C) 2007 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#undef DLIB_TIMEOUT_KERNEl_ABSTRACT_
#ifdef DLIB_TIMEOUT_KERNEl_ABSTRACT_
#include "../threads.h"
namespace dlib
{
class timeout
{
/*!
WHAT THIS OBJECT REPRESENTS
This object provides a simple way to implement a timeout. An example will
make its use clear. Suppose we want to read from a socket but we want to
terminate the connection if the read takes longer than 10 seconds. This
could be accomplished as follows:
connection* con = a connection from somewhere;
{
// setup a timer that will call con->shutdown() in 10 seconds
timeout t(*con,&connection::shutdown,10000);
// Now call read on the connection. If this call to read() takes more
// than 10 seconds then the t timeout will trigger and shutdown the
// connection. If read completes in less than 10 seconds then the t
// object will be destructed on the next line due to the } and then the
// timeout won't trigger.
con->read(buf,100);
}
Alternatively, if you have a compiler capable of using C++11 lambda
functions, you can use a syntax like this:
{
timeout t([con](){ con->shutdown(); }, 10000);
con->read(buf,100);
}
More generally, you can use this with things other than sockets. For
example, the following statement will print "Hello world!" after 1000ms:
timeout t([](){ cout << "Hello world!" << endl; }, 1000);
THREAD SAFETY
All methods of this class are thread safe.
!*/
public:
template <
typename T
>
timeout (
T callback_function,
unsigned long ms_to_timeout
);
/*!
requires
- callback_function does not throw
ensures
- does not block.
- #*this is properly initialized
- if (this object isn't destructed in ms_to_timeout milliseconds) then
- callback_function() will be called in ms_to_timeout milliseconds.
throws
- std::bad_alloc
- dlib::thread_error
!*/
template <
typename T
>
timeout (
T& object,
void (T::*callback_function)(),
unsigned long ms_to_timeout
);
/*!
requires
- callback_function does not throw
ensures
- does not block.
- #*this is properly initialized
- if (this object isn't destructed in ms_to_timeout milliseconds) then
- (object.*callback_function)() will be called in ms_to_timeout
milliseconds.
throws
- std::bad_alloc
- dlib::thread_error
!*/
template <
typename T,
typename U
>
timeout (
T& object,
void (T::*callback_function)(U callback_function_argument),
unsigned long ms_to_timeout,
U callback_function_argument
);
/*!
requires
- callback_function does not throw
ensures
- does not block.
- #*this is properly initialized
- if (this object isn't destructed in ms_to_timeout milliseconds) then
- (object.*callback_function)(callback_function_argument) will be
called in ms_to_timeout milliseconds.
throws
- std::bad_alloc
- dlib::thread_error
!*/
template <
typename T
>
timeout (
T& object,
int (T::*callback_function)(),
unsigned long ms_to_timeout
);
/*!
requires
- callback_function does not throw
ensures
- does not block.
- #*this is properly initialized
- if (this object isn't destructed in ms_to_timeout milliseconds) then
- (object.*callback_function)() will be called in ms_to_timeout
milliseconds.
throws
- std::bad_alloc
- dlib::thread_error
!*/
template <
typename T,
typename U
>
timeout (
T& object,
int (T::*callback_function)(U callback_function_argument),
unsigned long ms_to_timeout,
U callback_function_argument
);
/*!
requires
- callback_function does not throw
ensures
- does not block.
- #*this is properly initialized
- if (this object isn't destructed in ms_to_timeout milliseconds) then
- (object.*callback_function)(callback_function_argument) will be
called in ms_to_timeout milliseconds.
throws
- std::bad_alloc
- dlib::thread_error
!*/
virtual ~timeout (
);
/*!
requires
- is not called from inside the callback_function given to the
constructor.
ensures
- any resources associated with *this have been released
- if (the callback_function hasn't been called yet) then
- the callback_function specified in the constructor will not be called
!*/
private:
// restricted functions
timeout(const timeout&); // copy constructor
timeout& operator=(const timeout&); // assignment operator
};
}
#endif // DLIB_TIMEOUT_KERNEl_ABSTRACT_
|