---
name: "corelinux_ThreadContext"
section: "3"
platform: "linux"
package: "libcorelinux-dev"
version: "0.4.32-5"
release: "Debian 3.1 (Sarge)"
platforms: ["linux"]
url: "https://new.carta.tech/corelinux_ThreadContext"
---

# corelinux\_ThreadContext(3)

ThreadContext describes the context in which the thread operates.

## NAME

corelinux::ThreadContext - **ThreadContext** describes the context in which the thread operates.

## SYNOPSIS

`#include <ThreadContext.hpp>`

Inherits **corelinux::Synchronized**.

Inherited by **ArgumentContext**, and **EventContext**.

### Public Member Functions

**ThreadContext** (**CallerFunctionPtr**)  throw ( Assertion )\
 *Default constructor only requires a caller entry point function.*  **ThreadContext** (**CallerFunctionPtr**, Size)  throw ( Assertion )\
 *Constructor which allows the caller to define the stack.*  **ThreadContext** (**ThreadContextCref**)  throw ( Assertion )\
 *Copy constructor takes information from the context argument.*  virtual **~ThreadContext** (void)\
 *Virtual destructor.*  **ThreadContextRef** **operator=** (**ThreadContextCref**)  throw ( Assertion )\
 *Assignment operator changes the context.*  bool **operator==** (**ThreadContextCref**) const \
 *Equality operator compares contexts.*  bool **operator==** (ThreadIdentifierCref) const \
 *Equality matches the thread identifiers.*  bool **operator==** (**CallerFunctionPtr**) const \
 *Equality operator matches the callers function.*  **operator ThreadIdentifierCref** (void) const \
 *Coerces* **ThreadContext** *to ThreadIdentifier.*  const  **ThreadState** & **getState** (void) const \
 *Get the state of the thread as reflected in its context.*  Size **getStackSize** (void) const \
 *Get the size of the stack as defined by the context constructor.*  Int **getShareMask** (void) const \
 *Get the share mask for the thread which determines VM, FILES, FILESYSTEM, SIGNAL shares.*  Int **getReturnCode** (void) const \
 *Return the code returned by the callers function.*  ThreadIdentifierCref **getIdentifier** (void) const \
 *Get the identifier for the thread.*  virtual **ThreadFrameFunctionPtr** **getFramePointer** (void)\
 *Get the thread frame function pointer.*  BytePtr **getStack** (void)\
 *Get the stack pointer.*  BytePtr \* **getStackTop** (void)\
 *Get the top of stack pointer.*  void **setShareMask** (Int)\
 *Change the sharing mask for the thread.*  void **setFrameFunction** (**ThreadFrameFunctionPtr**)\
 *Allows the caller to substitute the thread frame entry point.*  void **setContextFunctions** (**ThreadContextCreatePtr**, **ThreadContextDestroyPtr**)\
 *Allows the caller to substitute the routines which create and destroy the managed* **ThreadContext** *object.*  void **setStackFunctions** (**ThreadStackCreatePtr**, **ThreadStackDestroyPtr**)\
 *Allows the caller to substitute the routines which create and destroy the managed* **ThreadContext** *stack object.*  void **setReturnCode** (Int)\
 *Set the return code for the thread.*  void **setThreadState** (**ThreadState**)\
 *Set the state for the thread.*  **ThreadContextPtr** **createContext** (void)  throw ( ThreadException )\
 *Create a instance of ourself, we also invoke the create stack method so the instance is ready to be used to run a thread.*  void **destroyContext** (**ThreadContextPtr**)  throw ( Assertion )\
 *Destroys the context instance.*

### Static Public Member Functions

Int **cloneFrameFunction** (**ThreadContextPtr**)\
 *The definitive thread frame entry point.*

### Protected Member Functions

**ThreadContext** (void)  throw ( Assertion )\
 *Default constructor throws NEVER\_GET\_HERE.*  **ThreadContextRef** **operator=** (ThreadIdentifier)\
 *Assignment operator for designating thread identity.*  **CallerFunctionPtr** **getCallerFunction** (void)\
 *Return the function pointer of the callers thread routine.*

## Detailed Description

**ThreadContext** describes the context in which the thread operates.

Included are stack resource, shared address space flags, factory methods, and state indicators.

## Constructor & Destructor Documentation

### corelinux::ThreadContext::ThreadContext (CallerFunctionPtr) throw ( Assertion )

Default constructor only requires a caller entry point function. Defaults in effect are 8k stack which is allocated by the system, and all resources of the caller are shared by the new thread.

**Parameters:**

*CallerFunction* pointer to the callers thread routine.

**Exceptions:**

*Assertion* if pointer is null

### corelinux::ThreadContext::ThreadContext (CallerFunctionPtr, Size) throw ( Assertion )

Constructor which allows the caller to define the stack. All resources of the caller are shared by the new thread.

**Parameters:**

*CallerFunction* pointer to the callers thread routine. \
 *Size* **Request** size for stack in number of bytes.

**Exceptions:**

*Assertion* if routine pointer is null or callers stack size is negative.

### corelinux::ThreadContext::ThreadContext (ThreadContextCref) throw ( Assertion )

Copy constructor takes information from the context argument. **Parameters:**

*ThreadContext* reference to existing context

**Exceptions:**

*ThreadNotWaitingException* if the argument context is not in a THREAD\_WAITING\_TO\_START state.

## Member Function Documentation

### Int corelinux::ThreadContext::cloneFrameFunction (ThreadContextPtr)` [static]`

The definitive thread frame entry point. This is the address that 'clone' gets.

**Parameters:**

*ThreadContext* pointer to a thread context

**Returns:**

Int return code

### ThreadContextPtr corelinux::ThreadContext::createContext (void) throw ( ThreadException )

Create a instance of ourself, we also invoke the create stack method so the instance is ready to be used to run a thread. **Returns:**

**ThreadContext** pointer to object.

**Exceptions:**

*ThreadAllocationException* either for Stack or **Context**

### void corelinux::ThreadContext::destroyContext (ThreadContextPtr) throw ( Assertion )

Destroys the context instance. A check is made to insure it is not a suicide.

**Parameters:**

*ThreadContext* pointer to context to destroy

**Exceptions:**

*Assertion* if self referenced

### CallerFunctionPtr corelinux::ThreadContext::getCallerFunction (void)` [protected]`

Return the function pointer of the callers thread routine. **Returns:**

CallerFunctionPtr

### ThreadFrameFunctionPtr corelinux::ThreadContext::getFramePointer (void)` [virtual]`

Get the thread frame function pointer. **Returns:**

ThreadFrameFunctionPtr pointer to instance or default thread frame

### ThreadIdentifierCref corelinux::ThreadContext::getIdentifier (void) const

Get the identifier for the thread. This is only valid once a thread is started

**Returns:**

ThreadIdentifier the id

### Int corelinux::ThreadContext::getReturnCode (void) const

Return the code returned by the callers function. This is only valid if the thread ended normally

**Returns:**

Int return code

**See also:**

**ThreadState**

### Int corelinux::ThreadContext::getShareMask (void) const

Get the share mask for the thread which determines VM, FILES, FILESYSTEM, SIGNAL shares. **Returns:**

Int

### Size corelinux::ThreadContext::getStackSize (void) const

Get the size of the stack as defined by the context constructor. **Returns:**

Size in bytes

### const ThreadState & corelinux::ThreadContext::getState (void) const

Get the state of the thread as reflected in its context. **Returns:**

ThreadState

### corelinux::ThreadContext::operator ThreadIdentifierCref (void) const

Coerces **ThreadContext** to ThreadIdentifier. **Returns:**

ThreadIdentifier reference

### ThreadContextRef corelinux::ThreadContext::operator= (ThreadIdentifier)` [protected]`

Assignment operator for designating thread identity. **Parameters:**

*ThreadIdentifier* as retrieved from the OS

**Returns:**

**ThreadContext** reference to self

### ThreadContextRef corelinux::ThreadContext::operator= (ThreadContextCref) throw ( Assertion )

Assignment operator changes the context. **Parameters:**

*ThreadContext* reference to existing context

**Returns:**

**ThreadContext** reference

**Exceptions:**

*ThreadNotWaitingException* if the argument context is not in a THREAD\_WAITING\_TO\_START state.

### bool corelinux::ThreadContext::operator== (CallerFunctionPtr) const

Equality operator matches the callers function. **Parameters:**

*CallerFunctionPtr* a function reference

**Returns:**

bool true if same.

### bool corelinux::ThreadContext::operator== (ThreadIdentifierCref) const

Equality matches the thread identifiers. **Parameters:**

*ThreadIdentifier* reference to identifier

**Returns:**

bool true if same

### bool corelinux::ThreadContext::operator== (ThreadContextCref) const

Equality operator compares contexts. **Parameters:**

*ThreadContext* reference to existing context

**Returns:**

bool true if same

### void corelinux::ThreadContext::setContextFunctions (ThreadContextCreatePtr, ThreadContextDestroyPtr)

Allows the caller to substitute the routines which create and destroy the managed **ThreadContext** object. The call to create the object comes in at the startThread prior to stack allocation, the call to destroy the object comes from startThread exception and error handling, or when requested by the caller.

**Parameters:**

*ThreadContextCreatePtr* the function pointer to set, If this argument is NULLPTR the default handlers are set for create and destroy. \
 *ThreadContextDestroyPtr* to the function pointer to set. If this argument is NULLPTR the default handlers are set for create and destroy.

### void corelinux::ThreadContext::setFrameFunction (ThreadFrameFunctionPtr)

Allows the caller to substitute the thread frame entry point. **Parameters:**

*ThreadFrameFunctionPtr* points to the new frame function that is called when starting a thread. If this argument is NULLPTR the default handler is set.

### void corelinux::ThreadContext::setReturnCode (Int)

Set the return code for the thread. **Parameters:**

*Int* return code value

### void corelinux::ThreadContext::setShareMask (Int)

Change the sharing mask for the thread. This is only effective when set prior to starting the thread.

**Parameters:**

*Int* mask of values for thread resource sharing and signal disposition

### void corelinux::ThreadContext::setStackFunctions (ThreadStackCreatePtr, ThreadStackDestroyPtr)

Allows the caller to substitute the routines which create and destroy the managed **ThreadContext** stack object. The call to create the stack object comes in at the startThread prior to threading, the call to destroy the object comes from startThread exception and error handling, or when the destruction of the **ThreadContext** is imanent.

**Parameters:**

*ThreadStackCreatePtr* pointer to set. If this argument is NULLPTR the default handlers are set for create and destroy. \
 *ThreadStackDestroyPtr* the function pointer to set. If this argument is NULLPTR the default handlers are set for create and destroy.

### void corelinux::ThreadContext::setThreadState (ThreadState)

Set the state for the thread. **Parameters:**

*ThreadState* the threads new state

## Author

Generated automatically by Doxygen for CoreLinux++ from the source code.
