xtd 0.2.0
Loading...
Searching...
No Matches
thread.hpp
Go to the documentation of this file.
1
4#pragma once
6#include "wait_handle.hpp"
7#include "thread_priority.hpp"
8#include "thread_start.hpp"
9#include "thread_state.hpp"
10#include "../as.hpp"
11#include "../core_export.hpp"
12//#include "../date_time.hpp"
13#include "../intptr.hpp"
14#include "../object.hpp"
15#include "../time_span.hpp"
16#include "../types.hpp"
17
19namespace xtd {
21 class date_time;
23
25 namespace threading {
27 class thread_pool;
29
49 class core_export_ thread : public object {
50 struct data;
51
52 struct static_data;
53
54 public:
56
60 static const intptr invalid_handle;
61
66
68
94
96 thread();
97 template<class start_t>
98 explicit thread(start_t start) : thread(parameterized_thread_start {start}) {}
99 template<class start_t>
100 thread(start_t start, int32 max_stack_size) : thread(parameterized_thread_start {start}, max_stack_size) {}
101 thread(thread&&) = default;
102 thread(const thread&) = default;
103 auto operator=(thread&&) -> thread& = default;
104 auto operator=(const thread&) -> thread&;
105 ~thread();
107
109
113 [[nodiscard]] auto auto_join() const noexcept -> bool;
117 auto auto_join(bool value) -> thread&;
118
121 [[nodiscard]] auto handle() const noexcept -> intptr;
122
125 [[nodiscard]] auto is_alive() const noexcept -> bool;
126
137 [[nodiscard]] auto is_background() const noexcept -> bool;
149 auto is_background(bool value) -> thread&;
150
153 [[nodiscard]] auto is_main_thread() const noexcept -> bool;
154
158 [[nodiscard]] auto is_thread_pool_thread() const noexcept -> bool;
159
164 [[nodiscard]] auto joinable() const noexcept -> bool;
165
170 [[nodiscard]] auto managed_thread_id() const noexcept -> int32;
171
174 [[nodiscard]] auto name() const noexcept -> string;
178 auto name(const string& value) -> thread&;
179
190 [[nodiscard]] auto priority() const noexcept -> xtd::threading::thread_priority;
202
208 [[nodiscard]] auto processor_affinity() const noexcept -> const xtd::array<xtd::size>&;
214 auto processor_affinity(const xtd::array<xtd::size>& value) -> thread&;
215
219 [[nodiscard]] auto thread_id() const noexcept -> intptr;
220
225 [[nodiscard]] auto thread_state() const noexcept -> xtd::threading::thread_state;
227
229
233 [[nodiscard]] static auto current_thread() noexcept -> thread&;
234
238 [[nodiscard]] static auto main_thread() -> thread&;
240
242
246 auto abort() -> void;
247
250 auto detach() -> void;
251
254 [[nodiscard]] auto get_hash_code() const noexcept -> xtd::size override;
255
259 auto interrupt() -> void;
260
263 auto join() -> void;
264
270 auto join(int32 milliseconds_timeout) -> bool;
271
277 auto join(const time_span& timeout) -> bool;
278
283 auto resume() -> void;
284
287 auto start() -> void;
288
292 auto start(const xtd::any_object& obj) -> void;
293
298 auto suspend() -> void;
300
302
307 static auto start_new(const xtd::threading::thread_start& start) -> thread;
313
319 static auto join_all() -> void;
326 static auto join_all(int32 milliseconds_timeout) -> bool;
333 static auto join_all(const time_span& timeout) -> bool;
334
338 template<class collection_t>
339 static auto join_all(const collection_t& threads) -> void {join_all(threads, timeout::infinite);}
345 template<class collection_t>
346 static auto join_all(const collection_t& threads, int32 milliseconds_timeout) -> bool {
347 auto thread_pointers = xtd::array<thread*> {};
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);
351 }
352
357 template<class collection_t>
358 static auto join_all(const collection_t& threads, const time_span& timeout) -> bool {return join_all(threads, as<int32>(timeout.total_milliseconds_duration().count()));}
359
363 static auto sleep(int32 milliseconds_timeout) -> void;
364
368 static auto sleep(const time_span& timeout) -> void;
369
375 static auto spin_wait(int32 iterations) -> void;
376
382 static auto yield() noexcept -> bool;
384
386 template<class item_t>
387 static auto join_all(const std::initializer_list<item_t>& threads) -> bool {return join_all(threads, timeout::infinite);}
388 template<class item_t>
389 static auto join_all(const std::initializer_list<item_t>& threads, int32 milliseconds_timeout) -> bool {
390 auto thread_pointers = xtd::array<thread*> {};
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);
394 }
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;
403 static auto join_all(const xtd::array<xtd::sptr<thread>>& threads) -> 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;
406 static auto join_all(const xtd::array<xtd::uptr<thread>>& threads) -> 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);}
414
415 private:
416 friend class thread_pool;
417 friend class wait_handle;
418
419 void close();
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&;
437
438 static constexpr int32 main_managed_thread_id = 1;
439 static constexpr int32 unmanaged_thread_id = 0;
440
441 xtd::sptr<data> data_;
442 static intptr main_thread_id_;
443 };
444 }
445}
446
447#include "this_thread.hpp"
Contains xtd::as method.
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.