Thread

Thread class

Thread implementation. Objects of this class should only be allocated using System::MakeObject() function. Never create instance of this type on stack or using operator new, as it will result in runtime errors and/or assertion faults. Always wrap this class into System::SmartPtr pointer and use this pointer to pass it to functions as argument.

class Thread : public System::Object

Methods

MethodDescription
void Abort()Aborts thread. Not implemented.
virtual bool Equals(ptr)Compares objects using C# Object.Equals semantics.
static std::enable_if<IsSmartPtr<T1>::value&&IsSmartPtr<T2>::value, bool>::type Equals(T1 const&, T2 const&)Compares reference type objects in C# style.
static std::enable_if<!IsSmartPtr<T1>::value&&!IsSmartPtr<T2>::value, bool>::type Equals(T1 const&, T2 const&)Compares value type objects in C# style.
static bool Equals(float const&, float const&)Emulates C#-style floating point comparison where two NaNs are considered equal even though according to IEC 60559:1989 NaN is not equal to any value, including NaN.
static bool Equals(double const&, double const&)Emulates C#-style floating point comparison where two NaNs are considered equal even though according to IEC 60559:1989 NaN is not equal to any value, including NaN.
virtual bool FastCast(const Details::FastRttiBase&, void **) constFor internal purposes only.
SharedPtr<Globalization::CultureInfo> get_CurrentCulture()Gets thread culture.
static System::SharedPtr<Thread> get_CurrentThread()Gets object which describes current thread.
SharedPtr<Globalization::CultureInfo> get_CurrentUICulture()Gets user interface culture used by thread.
bool get_IsAlive()Checks whether thread is alive.
bool get_IsBackground()Checks whether thread is background.
bool get_IsThreadPoolThread()Checks if thread is owned by a thread pool.
int get_ManagedThreadId() constGets identifier of thread. Can be got from OS, but if OS thread identifier exceeds int limits, ids of threads can intersect.
System::String get_Name()Gets thread name.
ThreadState get_ThreadState()Gets thread state.
Detail::SmartPtrCounter * GetCounter()Gets reference counter data structure associated with the object.
static int GetCurrentThreadId()Gets identifier of current thread.
int GetHashCode() const override
virtual const TypeInfo& GetType() constGets actual type of object. Analog of C# System.Object.GetType() call.
void Interrupt()Interrupt thread. Not implemented.
virtual bool Is(const TypeInfo&) constCheck if object represents an instance of type described by targetType. Analog of C# ‘is’ operator.
void Join()Joins managed thread. Performs unlimited waiting if required.
bool Join(int)Joins managed thread. Performs limited waiting.
bool Join(TimeSpan)Joins managed thread. Performs limited waiting.
void Lock()Implements C# lock() statement locking. Call directly or use LockContext sentry object.
virtual ptr MemberwiseClone() constAnalog of C# Object.MemberwiseClone() method. Enables cloning custom types.
static void MemoryBarrier()Synchronizes memory access.
Object()Creates object. Initializes all internal data structures.
Object(Object const&)Copy constructor. Doesn’t copy anything, really, just initializes new object and enables copy constructing subclasses.
Thread& operator=(const Thread&)Copies TLS data from different thread.
Object& operator=(Object const&)Assignment operator. Doesn’t copy anything, really, just initializes new object and enables copy constructing subclasses.
static bool ReferenceEquals(ptr const&, ptr const&)Compares objects by reference.
static std::enable_if<!IsSmartPtr<T>::value, bool>::type ReferenceEquals(T const&, T const&)Compares objects by reference.
static std::enable_if<!IsSmartPtr<T>::value, bool>::type ReferenceEquals(T const&, std::nullptr_t)Reference-compares value type object with nullptr.
bool ReferenceEquals(String const&, std::nullptr_t)Specialization of Object::ReferenceEquals for case of string and nullptr.
bool ReferenceEquals(String const&, String const&)Specialization of Object::ReferenceEquals for case of strings.
int RemovedSharedRefs(int)Decreases shared reference count by specified value.
void set_CurrentCulture(const SharedPtr<Globalization::CultureInfo>&)Sets thread culture.
void set_CurrentUICulture(const SharedPtr<Globalization::CultureInfo>&)Sets user interface culture used by thread.
void set_IsBackground(bool)Sets thread to background or foreground.
void set_Name(const System::String&)Sets thread name.
virtual void SetTemplateWeakPtr(uint32_t)Set n’th template argument a weak pointer (rather than shared). Allows switching pointers in containers to weak mode.
int SharedCount() constGets current value of shared reference counter.
Object * SharedRefAdded()Increments shared reference count. Shouldn’t be called directly; instead, use smart pointers or ThisProtector.
int SharedRefRemovedSafe()Decrements and returns shared reference count. Shouldn’t be called directly; instead, use smart pointers or ThisProtector.
static void Sleep(int)Stops current thread for specified timeout.
static void Sleep(TimeSpan)Stops current thread for specified timeout.
static void SpinWait(int)Waits for specific number of loop iterations.
void Start()Starts thread using null argument object.
void Start(const System::SharedPtr<System::Object>&)Starts thread.
Thread()Constructor.
Thread(ThreadStart)Constructor.
Thread(ParameterizedThreadStart)Constructor.
Thread(Thread&)Copy constructor.
virtual String ToString() constAnalog of C# Object.ToString() method. Enables converting custom objects to string.
static const TypeInfo& Type()Implements C# typeof(System.Object) construct.
void Unlock()Implements C# lock() statement unlocking. Call directly or use LockContext sentry object.
Detail::SmartPtrCounter * WeakRefAdded()Increments weak reference count. Shouldn’t be called directly; instead, use smart pointers or ThisProtector.
void WeakRefRemoved()Decrements weak reference count. Shouldn’t be called directly; instead, use smart pointers or ThisProtector.
static bool Yield()Yields thread.
virtual ~Object()Destroys object. Frees all internal data structures.
virtual ~Thread()Destructor.

Remarks

#include "system/threading/thread.h"
#include "system/smart_ptr.h"

int main()
{
  auto thread = System::MakeObject<System::Threading::Thread>([]()
  {
    std::cout << "Child thread ID: " << System::Threading::Thread::GetCurrentThreadId() << std::endl;
    System::Threading::Thread::Sleep(200);
  });

  std::cout << "Main thread ID: " << System::Threading::Thread::GetCurrentThreadId() << std::endl;

  thread->Start();
  thread->Join();

  return 0;
}
/*
This code example produces the following output:
Main thread ID: 2
Child thread ID: 1
*/

See Also