97 template<
class start_t>
99 template<
class start_t>
101 thread(thread&&) =
default;
102 thread(
const thread&) =
default;
103 auto operator=(thread&&) -> thread& =
default;
104 auto operator=(
const thread&) -> thread&;
125 [[nodiscard]] auto
is_alive() const noexcept ->
bool;
164 [[nodiscard]] auto
joinable() const noexcept ->
bool;
174 [[nodiscard]] auto
name() const noexcept ->
string;
338 template<class collection_t>
345 template<
class collection_t>
346 static auto join_all(
const collection_t& threads,
int32 milliseconds_timeout) ->
bool {
348 for (
auto& item : threads)
349 thread_pointers.resize(thread_pointers.length() + 1,
const_cast<thread*
>(&item));
350 return join_all_ptr(thread_pointers, milliseconds_timeout);
357 template<
class collection_t>
382 static auto yield() noexcept ->
bool;
386 template<class item_t>
388 template<
class item_t>
389 static auto join_all(
const std::initializer_list<item_t>& threads,
int32 milliseconds_timeout) ->
bool {
391 for (
auto& item : threads)
392 thread_pointers.resize(thread_pointers.length() + 1,
const_cast<thread*
>(&item));
393 return join_all_ptr(thread_pointers, milliseconds_timeout);
395 template<
class item_t>
396 static auto join_all(
const std::initializer_list<item_t>& threads,
const time_span& timeout) ->
bool {
return join_all(threads, as<int32>(timeout.total_milliseconds_duration().count()));}
397 static auto join_all(
const std::initializer_list<
xtd::sptr<thread>>& threads) -> bool;
398 static auto join_all(
const std::initializer_list<
xtd::sptr<thread>>& threads, int32 milliseconds_timeout) -> bool;
399 static auto join_all(
const std::initializer_list<
xtd::sptr<thread>>& threads,
const time_span& timeout) -> bool;
400 static auto join_all(
const std::initializer_list<
xtd::uptr<thread>>& threads) -> bool;
401 static auto join_all(
const std::initializer_list<
xtd::uptr<thread>>& threads, int32 milliseconds_timeout) -> bool;
402 static auto join_all(
const std::initializer_list<
xtd::uptr<thread>>& threads,
const time_span& timeout) -> bool;
404 static auto join_all(
const xtd::array<
xtd::sptr<thread>>& threads, int32 milliseconds_timeout) -> bool;
405 static auto join_all(
const xtd::array<
xtd::sptr<thread>>& threads,
const time_span& timeout) -> bool;
407 static auto join_all(
const xtd::array<
xtd::uptr<thread>>& threads, int32 milliseconds_timeout) -> bool;
408 static auto join_all(
const xtd::array<
xtd::uptr<thread>>& threads,
const time_span& timeout) -> bool;
409 template<
class start_t>
410 static auto start_new(start_t start) -> thread {
return start_new(thread_start {
start});}
411 template<
class start_t>
412 static auto start_new(start_t start,
const xtd::any_object& obj) -> thread {
return start_new(parameterized_thread_start {
start}, obj);}
416 friend class thread_pool;
417 friend class wait_handle;
420 static auto do_wait(wait_handle& wait_handle, int32 milliseconds_timeout) -> bool;
421 [[nodiscard]]
static auto generate_managed_thread_id() noexcept -> int32;
422 [[nodiscard]] static auto get_current_thread_handle() -> intptr;
423 [[nodiscard]] static auto get_current_thread_id() noexcept -> intptr;
424 [[nodiscard]] static auto get_static_data() -> static_data&;
425 [[nodiscard]] static auto get_thread(intptr thread_id) -> thread&;
426 auto interrupt_internal() ->
void;
427 [[nodiscard]] auto is_aborted() const noexcept ->
bool;
428 [[nodiscard]] auto is_stopped() const noexcept ->
bool;
429 [[nodiscard]] auto is_suspended() const noexcept ->
bool;
430 auto is_thread_pool_thread(
bool value) noexcept ->
void;
431 [[nodiscard]] auto is_unmanaged_thread() const noexcept ->
bool;
432 [[nodiscard]] auto is_unstarted() const noexcept ->
bool;
433 [[nodiscard]] auto is_wait_sleep_join() const noexcept ->
bool;
434 static auto join_all_ptr(const xtd::array<thread*>& threads, int32 milliseconds_timeout) ->
bool;
435 auto thread_proc() ->
void;
436 [[nodiscard]] static auto unmanaged_thread() -> thread&;
438 static constexpr int32 main_managed_thread_id = 1;
439 static constexpr int32 unmanaged_thread_id = 0;
441 xtd::sptr<data> data_;
442 static intptr main_thread_id_;
447#include "this_thread.hpp"
Represent a polymorphic wrapper capable of holding any type.
Definition any_object.hpp:29
Provides methods for creating, manipulating, searching, and sorting arrays, thereby serving as the ba...
Definition array.hpp:64
Represents an instant in time, typically expressed as a date and time of day.
Definition date_time.hpp:83
object()=default
Create a new instance of the ultimate base class object.
Provides a pool of threads that can be used to execute tasks, post work items, process asynchronous I...
Definition thread_pool.hpp:52
Creates and controls a thread, sets its priority, and gets its status.
Definition thread.hpp:49
thread(const xtd::threading::parameterized_thread_start &start)
Initializes a new instance of the xtd::threading::thread class, specifying a delegate that allows an ...
thread(const xtd::threading::thread_start &start)
Initializes a new instance of the xtd::threading::thread class.
static auto join_all(const collection_t &threads) -> void
Blocks the calling thread until all specified joinable threads collection terminate.
Definition thread.hpp:339
auto joinable() const noexcept -> bool
Gets a value indicating the current thread is joinable.
auto is_background() const noexcept -> bool
Gets a value indicating whether or not a thread is a background thread.
static auto yield() noexcept -> bool
Causes the calling thread to yield execution to another thread that is ready to run on the current pr...
auto handle() const noexcept -> intptr
Gets the native operating system handle.
auto detach() -> void
Sets the thread background.
auto is_main_thread() const noexcept -> bool
Gets a value indicating the current thread is the main thread.
auto is_thread_pool_thread() const noexcept -> bool
Gets a value indicating whether or not a thread belongs to the managed thread pool.
static auto sleep(int32 milliseconds_timeout) -> void
Suspends the current thread for a specified time.
static auto spin_wait(int32 iterations) -> void
Causes a thread to wait the number of times defined by the iterations parameter.
auto suspend() -> void
Either suspends the thread, or if the thread is already suspended, has no effect (Should not be used)...
static auto main_thread() -> thread &
Gets the main thread.
auto abort() -> void
Raises a xtd::threading::thread_aborted_exception in the thread on which it is invoked,...
static auto current_thread() noexcept -> thread &
Gets the currently running thread.
static const intptr invalid_handle
Represents an invalid native operating system handle. This field is read-only.
Definition thread.hpp:60
static auto start_new(const xtd::threading::thread_start &start) -> thread
Create and immedialtely start a xtd::threading::thread with specified method.
auto join() -> void
Blocks the calling thread until this thread object terminates, while continuing to perform standard C...
auto managed_thread_id() const noexcept -> int32
Gets a unique identifier for the current managed thread.
auto start() -> void
Causes the operating system to change the state of the current instance to xtd::threading::thread_sta...
auto processor_affinity() const noexcept -> const xtd::array< xtd::size > &
Gets the processors on which the associated thread can run.
static auto join_all(const collection_t &threads, int32 milliseconds_timeout) -> bool
Blocks the calling thread until all specified joinable threads collection terminate or the specified ...
Definition thread.hpp:346
auto priority() const noexcept -> xtd::threading::thread_priority
Gets a value indicating the scheduling priority of a thread.
static auto join_all() -> void
Blocks the calling thread until all joinable threads terminate.
static const intptr invalid_thread_id
Represents an invalid native operating system thread id. This field is read-only.
Definition thread.hpp:64
auto thread_state() const noexcept -> xtd::threading::thread_state
Gets a value containing the states of the current thread.
static auto join_all(const collection_t &threads, const time_span &timeout) -> bool
Blocks the calling thread until all specified joinable threads collection terminate or the specified ...
Definition thread.hpp:358
auto auto_join() const noexcept -> bool
Gets a value indicating the current thread wiil be joined when destroyed.
thread(const xtd::threading::thread_start &start, int32 max_stack_size)
Initializes a new instance of the xtd::threading::thread class, specifying the maximum stack size for...
auto is_alive() const noexcept -> bool
Gets a value indicating the execution status of the current thread.
auto resume() -> void
Resumes a thread that has been suspended (Should not be used).
static auto sleep(const time_span &timeout) -> void
Suspends the current thread for a specified time.
thread(const xtd::threading::parameterized_thread_start &start, int32 max_stack_size)
Initializes a new instance of the xtd::threading::thread class, specifying a delegate that allows an ...
auto name() const noexcept -> string
Gets the name of the thread.
auto thread_id() const noexcept -> intptr
Gets the native operating system thread id.
auto get_hash_code() const noexcept -> xtd::size override
Serves as a hash function for a particular type.
auto interrupt() -> void
Interrupts a thread that is in the xtd::threading::thread_state::wait_sleep_join thread state.
Contains a constant used to specify an infinite amount of time. This class cannot be inherited.
Definition timeout.hpp:33
static constexpr int32 infinite
A constant used to specify an infinite waiting period. This field is constant.
Definition timeout.hpp:41
Represents a time interval.
Definition time_span.hpp:29
Contains core_export_ keyword.
xtd::delegate< void(const xtd::any_object &obj)> parameterized_thread_start
Represents the method that executes on a xtd::threading::thread.
Definition parameterized_thread_start.hpp:29
xtd::delegate< void()> thread_start
Represents the method that executes on a xtd::threading::thread.
Definition thread_start.hpp:24
#define core_export_
Define shared library export.
Definition core_export.hpp:13
thread_priority
Specifies the scheduling priority of a system::threading::thread.
Definition thread_priority.hpp:28
size_t size
Represents a size of any object in bytes.
Definition size.hpp:23
xtd::shared_ptr_object< type_t > sptr
The xtd::sptr object is a shared pointer.
Definition sptr.hpp:25
std::intmax_t intptr
Represent a pointer or a handle.
Definition intptr.hpp:23
xtd::unique_ptr_object< type_t > uptr
The xtd::uptr object is a unique pointer.
Definition uptr.hpp:25
std::int32_t int32
Represents a 32-bit signed integer.
Definition int32.hpp:23
auto as(any_object &o) -> type_t
Casts a type into another type.
Definition __as_any_object.hpp:60
@ start
Starting of a logical operation.
Definition trace_event_type.hpp:37
Contains xtd::intptr type.
The xtd::threading namespace provides classes and interfaces that enable multithreaded programming....
Definition abandoned_mutex_exception.hpp:10
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition abstract_object.hpp:8
constexpr const_pointer data() const noexcept
Gets direct access to the underlying contiguous storage.
Definition read_only_span.hpp:201
Contains xtd::object class.
Contains xtd::threading::parameterized_thread_start delegate.
Contains xtd::threading::thread_priority enumeration.
Contains xtd::threading::thread_start delegate.
Contains xtd::threading::thread_state enumeration.
Contains xtd::time_span class.
Contains xtd fundamental types.
Contains xtd::threading::wait_handle class.