Represents a thread synchronization event that, when signaled, resets automatically after releasing a single waiting thread. This class cannot be inherited.
- Header
#include <xtd/threading/auto_reset_event>
- Namespace
- xtd::threading
- Library
- xtd.core
- Warning
- There is no guarantee that every call to the xtd::threading::auto_reset_event::set method will release a thread. If two calls are too close together, so that the second call occurs before a thread has been released, only one thread is released. It's as if the second call did not happen. Also, if xtd::threading::auto_reset_event::set is called when there are no threads waiting and the xtd::threading::auto_reset_event is already signaled, the call has no effect.
- Note
- Unlike the xtd::threading::auto_reset_event class, the xtd::threading::event_wait_handle class provides access to named system synchronization events.
- Examples
- The following example shows how to use xtd::threading::auto_reset_event to release one thread at a time, by calling the xtd::threading::event_wait_handle::set method (on the base class) each time the user presses the Enter key. The example starts three threads, which wait on an xtd::threading::auto_reset_event that was created in the signaled state. The first thread is released immediately, because the xtd::threading::auto_reset_event is already in the signaled state. This resets the xtd::threading::auto_reset_event to the non-signaled state, so that subsequent threads block. The blocked threads are not released until the user releases them one at a time by pressing the Enter key. After the threads are released from the first xtd::threading::auto_reset_event, they wait on another xtd::threading::auto_reset_event that was created in the non-signaled state. All three threads block, so the xtd::threading::event_wait_handle::set method must be called three times to release them all.
#include <xtd/threading/auto_reset_event>
#include <xtd/threading/thread>
#include <xtd/console>
#include <xtd/startup>
namespace auto_reset_event_example {
class program {
public:
static auto main() {
"The threads wait on auto_reset_event #1, which was created\r\n"
"in the signaled state, so the first thread is released.\r\n"
"This puts auto_reset_event #1 into the unsignaled state.");
for (auto index = 1; index < 4; ++index) {
threads.emplace_back(thread_proc);
threads.back().name(ustring::format("Thread_{}", index));
threads.back().start();
}
for (auto index = 0; index < 2; ++index) {
event_1.set();
}
for (
int i = 0;
i < 3;
i++) {
event_2.set();
}
}
static void thread_proc() {
event_1.wait_one();
event_2.wait_one();
}
private:
inline static std::vector<thread> threads = std::vector<thread>(4);
};
}
startup_(auto_reset_event_example::program::main);
- Examples:
- auto_reset_event.cpp, timer.cpp, and wait_handle.cpp.
|
Static Public Attributes inherited from xtd::threading::wait_handle |
| static const intptr | invalid_handle |
| | Represents an invalid native operating system handle. This field is read-only. More...
|
| |
| static constexpr size_t | wait_timeout = std::numeric_limits<size_t>::max() |
| | Indicates that a xtd::threading::wait_handle::wait_any operation timed out before any of the wait handles were signaled. This field is constant. This field is one of the possible return values of xtd::threading::wait_handle::wait_any. More...
|
| |
Public Member Functions inherited from xtd::threading::event_wait_handle |
|
| event_wait_handle () |
| |
| | event_wait_handle (bool initial_state) |
| | Initializes a new instance of the xtd::threading::event_wait_handle class, specifying whether the wait handle is initially signaled. More...
|
| |
| | event_wait_handle (const ustring &name) |
| | Initializes a new instance of the xtd::threading::event_wait_handle class, specifying the name. More...
|
| |
| | event_wait_handle (const ustring &name, bool &created_new) |
| | Initializes a new instance of the xtd::threading::event_wait_handle class, specifying whether the wait handle is initially signaled if created as a result of this call, whether it resets automatically or manually, the name of a system synchronization event, and a bool variable whose value after the call indicates whether the named system event was created. More...
|
| |
| | event_wait_handle (bool initial_state, const ustring &name) |
| | Initializes a new instance of the xtd::threading::event_wait_handle class, specifying whether the wait handle is initially signaled if created as a result of this call, and the name of a system synchronization event. More...
|
| |
| | event_wait_handle (bool initial_state, const ustring &name, bool &created_new) |
| | Initializes a new instance of the xtd::threading::event_wait_handle class, specifying whether the wait handle is initially signaled if created as a result of this call, the name of a system synchronization event, and a bool variable whose value after the call indicates whether the named system event was created. More...
|
| |
| | event_wait_handle (bool initial_state, event_reset_mode mode) |
| | Initializes a new instance of the xtd::threading::event_wait_handle class, specifying whether the wait handle is initially signaled, and whether it resets automatically or manually. More...
|
| |
| | event_wait_handle (bool initial_state, event_reset_mode mode, const ustring &name) |
| | Initializes a new instance of the xtd::threading::event_wait_handle class, specifying whether the wait handle is initially signaled if created as a result of this call, whether it resets automatically or manually, and the name of a system synchronization event. More...
|
| |
| | event_wait_handle (bool initial_state, event_reset_mode mode, const ustring &name, bool &created_new) |
| | Initializes a new instance of the xtd::threading::event_wait_handle class, specifying whether the wait handle is initially signaled if created as a result of this call, whether it resets automatically or manually, the name of a system synchronization event, and a bool variable whose value after the call indicates whether the named system event was created. More...
|
| |
| intptr | handle () const noexcept override |
| | Gets the native operating system handle. More...
|
| |
| void | handle (intptr value) override |
| | Sets the native operating system handle. More...
|
| |
| void | close () override |
| | Releases all resources held by the current xtd::threading::wait_handle. More...
|
| |
|
int32 | compare_to (const event_wait_handle &value) const noexcept override |
| |
|
bool | equals (const event_wait_handle &value) const noexcept override |
| |
| bool | reset () |
| | Sets the state of the event to nonsignaled, causing threads to block. More...
|
| |
| bool | set () |
| | Sets the state of the event to signaled, allowing one or more waiting threads to proceed. More...
|
| |
Public Member Functions inherited from xtd::threading::wait_handle |
| | wait_handle ()=default |
| | Initializes a new instance of the xtd::threading::wait_handle class. More...
|
| |
| virtual bool | wait_one () |
| | Blocks the current thread until the current xtd::threading::wait_handle receives a signal. More...
|
| |
| virtual bool | wait_one (int32 milliseconds_timeout) |
| | Blocks the current thread until the current xtd::threading::wait_handle receives a signal, using 32-bit signed integer to measure the time interval. More...
|
| |
| virtual bool | wait_one (const time_span &timeout) |
| | Blocks the current thread until the current instance receives a signal, using a xtd::time_span to measure the time interval. More...
|
| |
| | object ()=default |
| | Create a new instance of the ultimate base class object. More...
|
| |
| bool | equals (const object &obj) const noexcept |
| | Determines whether the specified object is equal to the current object. More...
|
| |
| virtual size_t | get_hash_code () const noexcept |
| | Serves as a hash function for a particular type. More...
|
| |
| virtual type_object | get_type () const noexcept |
| | Gets the type of the current instance. More...
|
| |
| template<typename object_t > |
| std::unique_ptr< object_t > | memberwise_clone () const noexcept |
| | Creates a shallow copy of the current object. More...
|
| |
| virtual xtd::ustring | to_string () const noexcept |
| | Returns a sxd::ustring that represents the current object. More...
|
| |
| virtual int32 | compare_to (const event_wait_handle &obj) const noexcept=0 |
| | Compares the current instance with another object of the same type. More...
|
| |
| virtual bool | equals (const event_wait_handle &) const noexcept=0 |
| | Indicates whether the current object is equal to another object of the same type. More...
|
| |
Static Public Member Functions inherited from xtd::threading::event_wait_handle |
| static event_wait_handle | open_existing (const ustring &name) |
| | Opens the specified named synchronization event, if it already exists. More...
|
| |
| static bool | try_open_existing (const ustring &name, event_wait_handle &result) noexcept |
| | Opens the specified named synchronization event, if it already exists, and returns a value that indicates whether the operation succeeded. More...
|
| |
Static Public Member Functions inherited from xtd::threading::wait_handle |
| static bool | signal_and_wait (wait_handle &to_signal, wait_handle &to_wait) |
| | Signals one xtd::threading::wait_handle and waits on another. More...
|
| |
| static bool | signal_and_wait (wait_handle &to_signal, wait_handle &to_wait, int32 milliseconds_timeout) |
| | Signals one xtd::threading::wait_handle and waits on another, specifying a time-out interval as a 32-bit signed integer. More...
|
| |
| static bool | signal_and_wait (wait_handle &to_signal, wait_handle &to_wait, const time_span &timeout) |
| | Signals one xtd::threading::wait_handle and waits on another, specifying a time-out interval as a time_span. More...
|
| |
| template<typename collection_t > |
| static bool | wait_all (const collection_t &wait_handles) |
| | Waits for all the elements in the specified collection to receive a signal. More...
|
| |
| template<typename collection_t > |
| 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 measure the time interval. More...
|
| |
| template<typename collection_t > |
| 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 value to measure the time interval. More...
|
| |
| template<typename collection_t > |
| static size_t | wait_any (const collection_t &wait_handles) |
| | Waits for any of the elements in the specified collection to receive a signal. More...
|
| |
| template<typename collection_t > |
| 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 integer to measure the time interval. More...
|
| |
| template<typename collection_t > |
| 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 to measure the time interval. More...
|
| |
| static bool | equals (const object &object_a, const object &object_b) noexcept |
| | Determines whether the specified object instances are considered equal. More...
|
| |
| static bool | reference_equals (const object &object_a, const object &object_b) noexcept |
| | Determines whether the specified object instances are the same instance. More...
|
| |
Protected Member Functions inherited from xtd::threading::event_wait_handle |
| bool | signal () override |
| | Releases ownership of the specified wait_handle object. More...
|
| |
| bool | wait (int32 milliseconds_timeout) override |
| | wait ownership of the specified mutex object. More...
|
| |
Protected Member Functions inherited from xtd::threading::wait_handle |
| | abstract_object ()=default |
| | Initializes a new instance of the xtd::abstract_object class. More...
|
| |