Represents a thread synchronization event that, when signaled, must be reset manually. This class cannot be inherited.
Represents a thread synchronization event.
Definition event_wait_handle.hpp:37
Represents a thread synchronization event that, when signaled, must be reset manually....
Definition manual_reset_event.hpp:35
- Header
#include <xtd/threading/manual_reset_event>
- Namespace
- xtd::threading
- Library
- xtd.core
- Warning
- Unlike the xtd::threading::manual_reset_event class, the xtd::threading::event_wait_handle class provides access to named system synchronization events.
- example
- The following example demonstrates how xtd::threading::manual_reset_event works. The example starts with a xtd::threading::manual_reset_event in the unsignaled state (that is, false is passed to the constructor). The example creates three threads, each of which blocks on the xtd::threading::manual_reset_event by calling its wtd::threading::wait_handle::wait_one method. When the user presses the Enter key, the example calls the wtd::threading::event_wait_handle::set method, which releases all three threads. Contrast this with the behavior of the wtd::threading::auto_reset_event class, which releases threads one at a time, resetting automatically after each release.
Pressing the Enter key again demonstrates that the xtd::threading::manual_reset_event remains in the signaled state until its wtd::threading::event_wait_handle::reset method is called: The example starts two more threads. These threads do not block when they call the wtd::threading::wait_handle::wait_one method, but instead run to completion.
Pressing the Enter key again causes the example to call the wtd::threading::event_wait_handle::reset method and to start one more thread, which blocks when it calls wtd::threading::wait_handle::wait_one. Pressing the Enter key one final time calls wtd::threading::event_wait_handle::set to release the last thread, and the program ends. #include <xtd/collections/generic/list>
#include <xtd/threading/manual_reset_event>
#include <xtd/threading/thread>
#include <xtd/console>
#include <xtd/startup>
namespace manual_reset_event_example {
class program {
public:
static void main() {
console::write_line("\nStart 3 named threads that block on a ManualresetEvent:\n");
for(
auto i = 0;
i <= 2; ++
i) {
threads.emplace_back(thread_proc);
threads.back().name(string::format("Thread_{}", i));
threads.back().start();
}
thread::sleep(500);
console::write_line("\nWhen all three threads have started, press Enter to call set()"
"\nto release all the threads.\n");
console::read_line();
mre.set();
thread::sleep(500);
console::write_line("\nWhen a ManualresetEvent is signaled, threads that call WaitOne()"
"\ndo not block. Press Enter to show this.\n");
console::read_line();
for(
auto i = 3;
i <= 4; ++
i) {
threads.emplace_back(thread_proc);
threads.back().name(string::format("Thread_{}", i));
threads.back().start();
}
thread::sleep(500);
console::write_line("\nPress Enter to call reset(), so that threads once again block"
"\nwhen they call WaitOne().\n");
console::read_line();
mre.reset();
threads.emplace_back(thread_proc);
threads.back().name("Thread_5");
threads.back().start();
thread::sleep(500);
console::write_line("\nPress Enter to call set() and conclude the demo.");
console::read_line();
mre.set();
}
private:
static void thread_proc() {
string name = thread::current_thread().name();
console::write_line(name + " starts and calls mre.WaitOne()");
mre.wait_one();
console::write_line(name + " ends.");
}
};
}
startup_(manual_reset_event_example::program::main);
Represents a strongly typed list of objects that can be accessed by index. Provides methods to search...
Definition list.hpp:71
#define startup_(main_method)
Defines the entry point to be called when the application loads. Generally this is set either to the ...
Definition startup.hpp:175
The xtd::collections::generic namespace contains interfaces and classes that define generic collectio...
Definition comparer.hpp:15
The xtd::threading namespace provides classes and interfaces that enable multithreaded programming....
Definition abandoned_mutex_exception.hpp:11
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition xtd_about_box.hpp:10
- Examples
- call_once.cpp, call_once2.cpp, and manual_reset_event.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.
|
|
static constexpr size_t | wait_timeout |
| Indicates that a xtd::threading::wait_handle::wait_any operation timed out before any of the wait handles were signaled. This field is constant.
|
|
Public Member Functions inherited from xtd::threading::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.
|
|
| event_wait_handle (const string &name) |
| Initializes a new instance of the xtd::threading::event_wait_handle class, specifying the name.
|
|
| event_wait_handle (const string &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.
|
|
| event_wait_handle (bool initial_state, const string &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.
|
|
| event_wait_handle (bool initial_state, const string &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.
|
|
| 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.
|
|
| event_wait_handle (bool initial_state, event_reset_mode mode, const string &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.
|
|
| event_wait_handle (bool initial_state, event_reset_mode mode, const string &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.
|
|
intptr | handle () const noexcept override |
| Gets the native operating system handle.
|
|
void | handle (intptr value) override |
| Sets the native operating system handle.
|
|
void | close () override |
| Releases all resources held by the current xtd::threading::wait_handle.
|
|
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.
|
|
bool | set () |
| Sets the state of the event to signaled, allowing one or more waiting threads to proceed.
|
|
virtual bool | equals (const object &obj) const noexcept |
| Determines whether the specified object is equal to the current object.
|
|
Public Member Functions inherited from xtd::threading::wait_handle |
| wait_handle ()=default |
| Initializes a new instance of the xtd::threading::wait_handle class.
|
|
virtual bool | wait_one () |
| Blocks the current thread until the current xtd::threading::wait_handle receives a signal.
|
|
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.
|
|
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.
|
|
| object ()=default |
| Create a new instance of the ultimate base class object.
|
|
virtual size_t | get_hash_code () const noexcept |
| Serves as a hash function for a particular type.
|
|
virtual type_object | get_type () const noexcept |
| Gets the type of the current instance.
|
|
template<typename object_t > |
xtd::uptr< object_t > | memberwise_clone () const |
| Creates a shallow copy of the current object.
|
|
virtual xtd::string | to_string () const noexcept |
| Returns a xtd::string that represents the current object.
|
|
virtual int32 | compare_to (const event_wait_handle &obj) const noexcept=0 |
| Compares the current instance with another object of the same type.
|
|
virtual bool | equals (const event_wait_handle &) const noexcept=0 |
| Indicates whether the current object is equal to another object of the same type.
|
|
Static Public Member Functions inherited from xtd::threading::event_wait_handle |
template<typename object_a_t , typename object_b_t > |
static bool | equals (const object_a_t &object_a, const object_b_t &object_b) noexcept |
| Determines whether the specified object instances are considered equal.
|
|
static event_wait_handle | open_existing (const string &name) |
| Opens the specified named synchronization event, if it already exists.
|
|
static bool | try_open_existing (const string &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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
template<typename object_a_t , typename object_b_t > |
static bool | equals (const object_a_t &object_a, const object_b_t &object_b) noexcept |
| Determines whether the specified object instances are considered equal.
|
|
template<typename object_a_t , typename object_b_t > |
static bool | reference_equals (const object_a_t &object_a, const object_b_t &object_b) noexcept |
| Determines whether the specified object instances are the same instance.
|
|
Protected Member Functions inherited from xtd::threading::event_wait_handle |
bool | signal () override |
| Releases ownership of the specified wait_handle object.
|
|
bool | wait (int32 milliseconds_timeout) override |
| wait ownership of the specified mutex object.
|
|
Protected Member Functions inherited from xtd::threading::wait_handle |
| abstract_object ()=default |
| Initializes a new instance of the xtd::abstract_object class.
|
|