Deskflow 1.22.0.197
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
Thread Class Reference

Thread handle. More...

#include <Thread.h>

Public Member Functions

 Thread (IJob *adoptedJob)
 Run adoptedJob in a new thread.
 Thread (const Thread &)
 Duplicate a thread handle.
 ~Thread ()
 Release a thread handle.

accessors

bool wait (double timeout=-1.0) const
 Wait for thread to terminate.
void * getResult () const
 Get the exit result.
IArchMultithread::ThreadID getID () const
 Get the thread id.
bool operator== (const Thread &) const
 Compare thread handles.
bool operator!= (const Thread &) const
 Compare thread handles.
static Thread getCurrentThread ()
 Get current thread's handle.
static void testCancel ()
 Test for cancellation.

manipulators

Threadoperator= (const Thread &)
 Assign thread handle.
void cancel ()
 Cancel thread.
void setPriority (int n)
 Change thread priority.
void unblockPollSocket ()
 Force pollSocket() to return.
static void exit (void *)
 Terminate the calling thread.

Detailed Description

Thread handle.

Creating a Thread creates a new context of execution (i.e. thread) that runs simulatenously with the calling thread. A Thread is only a handle to a thread; deleting a Thread does not cancel or destroy the thread it refers to and multiple Thread objects can refer to the same thread.

Threads can terminate themselves but cannot be forced to terminate by other threads. However, other threads can signal a thread to terminate itself by cancelling it. And a thread can wait (block) on another thread to terminate.

Most functions that can block for an arbitrary time are cancellation points. A cancellation point is a function that can be interrupted by a request to cancel the thread. Cancellation points are noted in the documentation.

Constructor & Destructor Documentation

◆ Thread() [1/2]

Thread::Thread ( IJob * adoptedJob)
explicit

Run adoptedJob in a new thread.

Create and start a new thread executing the adoptedJob. The new thread takes ownership of adoptedJob and will delete it.

◆ Thread() [2/2]

Thread::Thread ( const Thread & thread)

Duplicate a thread handle.

Make a new thread object that refers to an existing thread. This does not start a new thread.

◆ ~Thread()

Thread::~Thread ( )

Release a thread handle.

Release a thread handle. This does not terminate the thread. A thread will keep running until the job completes or calls exit() or allows itself to be cancelled.

Member Function Documentation

◆ cancel()

void Thread::cancel ( )

Cancel thread.

Cancel the thread. cancel() never waits for the thread to terminate; it just posts the cancel and returns. A thread will terminate when it enters a cancellation point with cancellation enabled. If cancellation is disabled then the cancel is remembered but not acted on until the first call to a cancellation point after cancellation is enabled.

A cancellation point is a function that can act on cancellation. A cancellation point does not return if there's a cancel pending. Instead, it unwinds the stack and destroys automatic objects, as if cancel() threw an exception (which is, in fact, what it does). Threads must take care to unlock and clean up any resources they may have, especially mutexes. They can catch(XThreadCancel) to do that then rethrow the exception or they can let it happen automatically by doing clean up in the d'tors of automatic objects (like Lock). Clients are strongly encouraged to do the latter. During cancellation, further cancel() calls are ignored (i.e. a thread cannot be interrupted by a cancel during cancellation).

Clients that catch(XThreadCancel) must always rethrow the exception. Clients that catch(...) must either rethrow the exception or include a catch(XThreadCancel) handler that rethrows. The RETHROW_XTHREAD macro may be useful for that.

◆ exit()

void Thread::exit ( void * result)
static

Terminate the calling thread.

Terminate the calling thread. This function does not return but the stack is unwound and automatic objects are destroyed, as if exit() threw an exception (which is, in fact, what it does). The argument is saved as the result returned by getResult(). If you have catch(...) blocks then you should add the following before each to avoid catching the exit:

catch(ThreadExit&) { throw; }

or add the RETHROW_XTHREAD macro to the catch(...) block.

◆ getCurrentThread()

Thread Thread::getCurrentThread ( )
static

Get current thread's handle.

Return a Thread object representing the calling thread.

◆ getID()

IArchMultithread::ThreadID Thread::getID ( ) const

Get the thread id.

Returns an integer id for this thread. This id must not be used to check if two Thread objects refer to the same thread. Use operator==() for that.

◆ getResult()

void * Thread::getResult ( ) const

Get the exit result.

Returns the exit result. This does an implicit wait(). It returns nullptr immediately if called by a thread on itself or on a thread that was cancelled.

(cancellation point)

◆ operator!=()

bool Thread::operator!= ( const Thread & thread) const

Compare thread handles.

Returns true if two Thread objects do not refer to the same thread.

◆ operator=()

Thread & Thread::operator= ( const Thread & thread)

Assign thread handle.

Assign a thread handle. This has no effect on the threads, it simply makes this thread object refer to another thread. It does not start a new thread.

◆ operator==()

bool Thread::operator== ( const Thread & thread) const

Compare thread handles.

Returns true if two Thread objects refer to the same thread.

◆ setPriority()

void Thread::setPriority ( int n)

Change thread priority.

Change the priority of the thread. Normal priority is 0, 1 is the next lower, etc. -1 is the next higher, etc. but boosting the priority may not be permitted and will be silenty ignored.

◆ testCancel()

void Thread::testCancel ( )
static

Test for cancellation.

testCancel() does nothing but is a cancellation point. Call this to make a function itself a cancellation point. If the thread was cancelled and cancellation is enabled this will cause the thread to unwind the stack and terminate.

(cancellation point)

◆ unblockPollSocket()

void Thread::unblockPollSocket ( )

Force pollSocket() to return.

Forces a currently blocked pollSocket() in the thread to return immediately.

◆ wait()

bool Thread::wait ( double timeout = -1.0) const

Wait for thread to terminate.

Waits for the thread to terminate (by exit() or cancel() or by returning from the thread job) for up to timeout seconds, returning true if the thread terminated and false otherwise. This returns immediately with false if called by a thread on itself and immediately with true if the thread has already terminated. This will wait forever if timeout < 0.0.

(cancellation point)


The documentation for this class was generated from the following files: