6 #include "../abstract.h" 8 #include "../time_span.h" 18 class registered_wait_handle;
63 static constexpr
size_t wait_timeout = std::numeric_limits<size_t>::max();
81 virtual intptr handle() const noexcept = 0;
84 virtual
void handle(
intptr value) = 0;
129 template<typename collection_t>
140 template<
typename collection_t>
141 static bool wait_all(
const collection_t& wait_handles,
int32 milliseconds_timeout) {
142 std::vector<wait_handle*> wait_handle_pointers;
143 for (
auto& item : wait_handles)
144 wait_handle_pointers.push_back(const_cast<wait_handle*>(as<wait_handle>(&item)));
145 return wait_all(wait_handle_pointers, milliseconds_timeout);
156 template<
typename collection_t>
166 template<
typename collection_t>
177 template<
typename collection_t>
178 static size_t wait_any(
const collection_t& wait_handles,
int32 milliseconds_timeout) {
179 std::vector<wait_handle*> wait_handle_pointers;
180 for (
auto& item : wait_handles)
181 wait_handle_pointers.push_back(const_cast<wait_handle*>(as<wait_handle>(&item)));
182 return wait_any(wait_handle_pointers, milliseconds_timeout);
193 template<
typename collection_t>
200 virtual bool wait_one();
208 virtual bool wait_one(
int32 milliseconds_timeout);
220 template <
typename... items_t>
221 static size_t wait_all(items_t... items) {
return wait_all(
timeout::infinite, items...);}
222 template <
typename... items_t>
224 template <
typename... items_t>
225 static size_t wait_all(
int32 milliseconds_timeout, items_t... items) {
226 std::vector<wait_handle*> wait_handle_pointers;
227 fill_wait_handle_pointers(wait_handle_pointers, items...);
228 return wait_all(wait_handle_pointers, milliseconds_timeout);
230 template<
typename item_t>
231 static bool wait_all(
const std::initializer_list<item_t>& wait_handles) {
return wait_all(wait_handles,
timeout::infinite);}
232 template<
typename item_t>
233 static bool wait_all(
const std::initializer_list<item_t>& wait_handles,
int32 milliseconds_timeout) {
234 std::vector<wait_handle*> wait_handle_pointers;
235 for (
auto& item : wait_handles)
236 wait_handle_pointers.push_back(const_cast<wait_handle*>(as<wait_handle>(&item)));
237 return wait_all(wait_handle_pointers, milliseconds_timeout);
239 template<
typename item_t>
241 static bool wait_all(
const std::initializer_list<std::shared_ptr<wait_handle>>& wait_handles);
242 static bool wait_all(
const std::initializer_list<std::shared_ptr<wait_handle>>& wait_handles,
int32 milliseconds_timeout);
243 static bool wait_all(
const std::initializer_list<std::shared_ptr<wait_handle>>& wait_handles,
const time_span& timeout);
244 static bool wait_all(
const std::initializer_list<std::unique_ptr<wait_handle>>& wait_handles);
245 static bool wait_all(
const std::initializer_list<std::unique_ptr<wait_handle>>& wait_handles,
int32 milliseconds_timeout);
246 static bool wait_all(
const std::initializer_list<std::unique_ptr<wait_handle>>& wait_handles,
const time_span& timeout);
247 static bool wait_all(
const std::vector<std::shared_ptr<wait_handle>>& wait_handles);
248 static bool wait_all(
const std::vector<std::shared_ptr<wait_handle>>& wait_handles,
int32 milliseconds_timeout);
249 static bool wait_all(
const std::vector<std::shared_ptr<wait_handle>>& wait_handles,
const time_span& timeout);
250 static bool wait_all(
const std::vector<std::unique_ptr<wait_handle>>& wait_handles);
251 static bool wait_all(
const std::vector<std::unique_ptr<wait_handle>>& wait_handles,
int32 milliseconds_timeout);
252 static bool wait_all(
const std::vector<std::unique_ptr<wait_handle>>& wait_handles,
const time_span& timeout);
253 static bool wait_all(
const std::vector<wait_handle*>& wait_handles,
int32 milliseconds_timeout);
255 template <
typename... items_t>
256 static size_t wait_any(items_t... items) {
return wait_any(
timeout::infinite, items...);}
257 template <
typename... items_t>
259 template <
typename... items_t>
260 static size_t wait_any(
int32 milliseconds_timeout, items_t... items) {
261 std::vector<wait_handle*> wait_handle_pointers;
262 fill_wait_handle_pointers(wait_handle_pointers, items...);
263 return wait_any(wait_handle_pointers, milliseconds_timeout);
265 template<
typename item_t>
266 static size_t wait_any(
const std::initializer_list<item_t>& wait_handles) {
return wait_any(wait_handles,
timeout::infinite);}
267 template<
typename item_t>
268 static size_t wait_any(
const std::initializer_list<item_t>& wait_handles,
int32 milliseconds_timeout) {
269 std::vector<wait_handle*> wait_handle_pointers;
270 for (
auto& item : wait_handles)
271 wait_handle_pointers.push_back(const_cast<wait_handle*>(as<wait_handle>(&item)));
272 return wait_any(wait_handle_pointers, milliseconds_timeout);
274 template<
typename item_t>
276 static size_t wait_any(
const std::initializer_list<std::shared_ptr<wait_handle>>& wait_handles);
277 static size_t wait_any(
const std::initializer_list<std::shared_ptr<wait_handle>>& wait_handles,
int32 milliseconds_timeout);
278 static size_t wait_any(
const std::initializer_list<std::shared_ptr<wait_handle>>& wait_handles,
const time_span& timeout);
279 static size_t wait_any(
const std::initializer_list<std::unique_ptr<wait_handle>>& wait_handles);
280 static size_t wait_any(
const std::initializer_list<std::unique_ptr<wait_handle>>& wait_handles,
int32 milliseconds_timeout);
281 static size_t wait_any(
const std::initializer_list<std::unique_ptr<wait_handle>>& wait_handles,
const time_span& timeout);
282 static size_t wait_any(
const std::vector<std::shared_ptr<wait_handle>>& wait_handles);
283 static size_t wait_any(
const std::vector<std::shared_ptr<wait_handle>>& wait_handles,
int32 milliseconds_timeout);
284 static size_t wait_any(
const std::vector<std::shared_ptr<wait_handle>>& wait_handles,
const time_span& timeout);
285 static size_t wait_any(
const std::vector<std::unique_ptr<wait_handle>>& wait_handles);
286 static size_t wait_any(
const std::vector<std::unique_ptr<wait_handle>>& wait_handles,
int32 milliseconds_timeout);
287 static size_t wait_any(
const std::vector<std::unique_ptr<wait_handle>>& wait_handles,
const time_span& timeout);
288 static size_t wait_any(
const std::vector<wait_handle*>& wait_handles,
int32 milliseconds_timeout);
298 virtual bool signal() = 0;
306 virtual bool wait(
int32 milliseconds_timeout) = 0;
310 template <
typename item_t,
typename... items_t>
311 static void fill_wait_handle_pointers(std::vector<wait_handle*>& wait_handle_pointers, item_t& first, items_t&... rest) {
312 wait_handle_pointers.push_back(const_cast<wait_handle*>(as<wait_handle>(&first)));
313 fill_wait_handle_pointers(wait_handle_pointers, rest...);
315 template <
typename item_t>
316 static void fill_wait_handle_pointers(std::vector<wait_handle*>& wait_handle_pointers, item_t& item) {
317 wait_handle_pointers.push_back(const_cast<wait_handle*>(as<wait_handle>(&item)));
signal
Specifies signals that can interrupt the current process.
Definition: signal.h:18
intmax_t intptr
Represent a pointer or a handle.
Definition: types.h:151
int32 as< int32 >(std::any value)
Casts a type into another type.
Definition: as.h:9228
Contains xtd::threading::timeout class.
The xtd namespace contains all fundamental classes to access Hardware, Os, System, and more.
Definition: system_report.h:17
std::chrono::milliseconds total_milliseconds_duration() const noexcept
Gets the value of the current xtd::time_span structure expressed in whole and fractional milliseconds...
static constexpr int32 infinite
A constant used to specify an infinite waiting period. This field is constant.
Definition: timeout.h:39
double total_milliseconds() const noexcept
Gets the value of the current xtd::time_span structure expressed in whole and fractional milliseconds...
static bool wait_all(const collection_t &wait_handles, const time_span &timeout)
Waits for all the elements in the specified collection to receive a signal, using a xtd::time_span va...
Definition: wait_handle.h:157
static bool wait_all(const collection_t &wait_handles)
Waits for all the elements in the specified collection to receive a signal.
Definition: wait_handle.h:130
A synchronization primitive that can also be used for interprocess synchronization.
Definition: registered_wait_handle.h:27
Creates and controls a thread, sets its priority, and gets its status.
Definition: thread.h:41
static size_t wait_any(const collection_t &wait_handles)
Waits for any of the elements in the specified collection to receive a signal.
Definition: wait_handle.h:167
Represents a time interval.
Definition: time_span.h:26
int_least32_t int32
Represents a 32-bit signed integer.
Definition: types.h:129
Contains a constant used to specify an infinite amount of time. This class cannot be inherited...
Definition: timeout.h:31
#define abstract_
This keyword is used to represents an abstract class.
Definition: abstract.h:23
static size_t wait_any(const collection_t &wait_handles, int32 milliseconds_timeout)
Waits for any of the elements in the specified collection to receive a signal, using a 32-bit signed ...
Definition: wait_handle.h:178
static const intptr invalid_handle
Represents an invalid native operating system handle. This field is read-only.
Definition: wait_handle.h:59
static size_t wait_any(const collection_t &wait_handles, const time_span &timeout)
Waits for any of the elements in the specified collection to receive a signal, using a xtd::time_span...
Definition: wait_handle.h:194
static bool wait_all(const collection_t &wait_handles, int32 milliseconds_timeout)
Waits for all the elements in the specified collection to receive a signal, using an int32 value to m...
Definition: wait_handle.h:141
Encapsulates operating system specific objects that wait for exclusive access to shared resources...
Definition: wait_handle.h:48