10#include "../core_export.hpp" 
   11#include "../new_ptr.hpp" 
   12#include "../static.hpp" 
   13#include "../time_span.hpp" 
   14#include "../types.hpp" 
   56      using asynchronous_io_thread_vector = std::vector<thread>;
 
   60      template<
typename callback_t>
 
   61      struct thread_item : 
public object {
 
   62        thread_item() = 
default;
 
   63        thread_item(thread_item&&) = 
default;
 
   64        thread_item(
const thread_item&) = 
default;
 
   65        thread_item& operator =(thread_item&&) = 
default;
 
   66        thread_item& operator =(
const thread_item&) = 
default;
 
   67        thread_item(
const callback_t& callback) : data {xtd::new_ptr<sdata>(callback)} {}
 
   68        thread_item(
const callback_t& callback, std::any state) : data {xtd::new_ptr<sdata>(callback, state)} {}
 
   69        thread_item(
const callback_t& callback, std::any state, 
wait_handle& wait_object, 
int32 milliseconds_timeout_interval, 
bool execute_only_once) : data {xtd::new_ptr<sdata>(callback, state, &wait_object, milliseconds_timeout_interval, execute_only_once)} {}
 
   77          sdata(
const callback_t& callback) : callback {callback} {}
 
   78          sdata(
const callback_t& callback, std::any state) : callback {callback}, state {state} {}
 
   79          sdata(
const callback_t& callback, std::any state, 
wait_handle* wait_object, 
int32 milliseconds_timeout_interval, 
bool execute_only_once) : callback {callback}, state {state}, wait_object {wait_object}, milliseconds_timeout_interval {milliseconds_timeout_interval}, execute_only_once {execute_only_once} {}
 
   84          int32 milliseconds_timeout_interval;
 
   85          bool execute_only_once = 
true;
 
   86          bool unregistered = 
false;
 
   93            this->callback(data->state);
 
   94          } 
while (!data->execute_only_once);
 
   98      using thread_pool_item = thread_item<wait_callback>;
 
   99      using thread_pool_asynchronous_io_item = thread_item<wait_or_timer_callback>;
 
  100      using thread_pool_item_collection = std::vector<thread_pool_item>;
 
  101      using thread_pool_asynchronous_io_item_collection = std::vector<thread_pool_asynchronous_io_item>;
 
  103      using thread_vector = std::vector<thread>;
 
  165      template <
typename callback_t>
 
  166      static bool queue_user_work_item(callback_t callback) {
return queue_user_work_item(
wait_callback {callback});}
 
  167      template <
typename callback_t>
 
  168      static bool queue_user_work_item(callback_t callback, std::any state) {
return queue_user_work_item(wait_callback {callback}, state);}
 
  209      template <
typename callback_t>
 
  210      static registered_wait_handle register_wait_for_single_object(
wait_handle& wait_object, callback_t callback, std::any state, 
int32 milliseconds_timeout_interval, 
bool execute_only_once) {
return register_wait_for_single_object(wait_object, 
wait_or_timer_callback {callback}, state, milliseconds_timeout_interval, execute_only_once);}
 
  211      template <
typename callback_t>
 
  212      static registered_wait_handle register_wait_for_single_object(wait_handle& wait_object, callback_t callback, std::any state, 
int64 milliseconds_timeout_interval, 
bool execute_only_once) {
return register_wait_for_single_object(wait_object, wait_or_timer_callback {callback}, state, milliseconds_timeout_interval, execute_only_once);}
 
  213      template <
typename callback_t>
 
  214      static registered_wait_handle register_wait_for_single_object(wait_handle& wait_object, callback_t callback, std::any state, 
const time_span& timeout, 
bool execute_only_once) {
return register_wait_for_single_object(wait_object, wait_or_timer_callback {callback}, state, timeout, execute_only_once);}
 
  215      template <
typename callback_t>
 
  216      static registered_wait_handle register_wait_for_single_object(wait_handle& wait_object, callback_t callback, std::any state, uint32 milliseconds_timeout_interval, 
bool execute_only_once) {
return register_wait_for_single_object(wait_object, wait_or_timer_callback {callback}, state, milliseconds_timeout_interval, execute_only_once);}
 
  234      static void asynchronous_io_run();
 
  235      static void create_thread();
 
  236      static void create_asynchronous_io_thread();
 
  237      static void initialize_min_threads();
 
  238      static void initialize_min_asynchronous_io_threads();
 
  239      static bool join_all_threads(
int32 milliseconds_timeout);
 
  240      static bool join_all_asynchronous_io_threads(
int32 milliseconds_timeout);
 
  243      static size_t max_threads_;
 
  244      static size_t max_asynchronous_io_threads_;
 
  245      static size_t min_threads_;
 
  246      static size_t min_asynchronous_io_threads_;
 
  247      static static_data static_data_;
 
  254#define __XTD_CORE_INTERNAL__ 
  255#include "../internal/__delegate.hpp" 
  256#undef __XTD_CORE_INTERNAL__ 
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes....
Definition object.hpp:42
 
A synchronization primitive that can also be used for interprocess synchronization.
Definition registered_wait_handle.hpp:29
 
Provides a pool of threads that can be used to execute tasks, post work items, process asynchronous I...
Definition thread_pool.hpp:53
 
static registered_wait_handle register_wait_for_single_object(wait_handle &wait_object, const wait_or_timer_callback &callback, std::any state, int32 milliseconds_timeout_interval, bool execute_only_once)
Registers a delegate to wait for a xtd::threading::wait_handle, specifying a 32-bit signed integer fo...
 
static bool set_max_threads(size_t worker_threads, size_t completion_port_threads)
Sets the number of requests to the thread pool that can be active concurrently. All requests above th...
 
static registered_wait_handle register_wait_for_single_object(wait_handle &wait_object, const wait_or_timer_callback &callback, std::any state, uint32 milliseconds_timeout_interval, bool execute_only_once)
Registers a delegate to wait for a xtd::threading::wait_handle, specifying a 32-bit signed integer fo...
 
static void join_all()
Join all resources and worker threads.
 
static bool join_all(int32 milliseconds_timeout)
Join all resources and worker threads.
 
static bool queue_user_work_item(const wait_callback &callback, std::any state)
Queues a method for execution. The method executes when a thread pool thread becomes available.
 
static bool set_min_threads(size_t worker_threads, size_t completion_port_threads)
Sets the number of idle threads the thread pool maintains in anticipation of new requests.
 
static bool join_all(const time_span &timeout)
Join all resources and worker threads.
 
static void close()
Close all resources and worker threads.
 
static bool queue_user_work_item(const wait_callback &callback)
Queues a method for execution. The method executes when a thread pool thread becomes available.
 
static registered_wait_handle register_wait_for_single_object(wait_handle &wait_object, const wait_or_timer_callback &callback, std::any state, const time_span &timeout, bool execute_only_once)
Registers a delegate to wait for a xtd::threading::wait_handle, specifying a 32-bit signed integer fo...
 
static void get_min_threads(size_t &worker_threads, size_t &completion_port_threads)
Retrieves the number of idle threads the thread pool maintains in anticipation of new requests....
 
static registered_wait_handle register_wait_for_single_object(wait_handle &wait_object, const wait_or_timer_callback &callback, std::any state, int64 milliseconds_timeout_interval, bool execute_only_once)
Registers a delegate to wait for a xtd::threading::wait_handle, specifying a 32-bit signed integer fo...
 
static void get_available_threads(size_t &worker_threads, size_t &completion_port_threads)
Retrieves the difference between the maximum number of thread pool threads returned by the GetMaxThre...
 
static void get_max_threads(size_t &worker_threads, size_t &completion_port_threads)
Retrieves the number of requests to the thread pool that can be active concurrently....
 
Creates and controls a thread, sets its priority, and gets its status.
Definition thread.hpp:43
 
Contains a constant used to specify an infinite amount of time. This class cannot be inherited.
Definition timeout.hpp:33
 
Encapsulates operating system specific objects that wait for exclusive access to shared resources.
Definition wait_handle.hpp:52
 
#define static_
This keyword is use to represent a static object. A static object can't be instantiated (constructors...
Definition static.hpp:37
 
#define core_export_
Define shared library export.
Definition core_export.hpp:13
 
xtd::sptr< type_t > ptr
The xtd::ptr object is a shared pointer.
Definition ptr.hpp:27
 
int32_t int32
Represents a 32-bit signed integer.
Definition int32.hpp:23
 
int64_t int64
Represents a 64-bit signed integer.
Definition int64.hpp:23
 
null_ptr null
Represents a null pointer value.
 
uint32_t uint32
Represents a 32-bit unsigned integer.
Definition uint32.hpp:23
 
delegate< void(std::any)> wait_callback
Represents a callback method to be executed by a thread pool thread.
Definition wait_callback.hpp:30
 
delegate< void(std::any, bool)> wait_or_timer_callback
Represents a method to be called when a xtd::threading::wait_handle is signaled or times out.
Definition wait_or_timer_callback.hpp:30
 
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition xtd_about_box.hpp:10
 
Contains xtd::threading::registered_wait_handle exception.
 
Definition thread_pool.hpp:71
 
Represents a time interval.
Definition time_span.hpp:29
 
Contains xtd::threading::semaphore exception.
 
Contains xtd::threading::wait_callback exception.
 
Contains xtd::threading::wait_or_timer_callback exception.
 
Contains xtd::threading::thread class.