TThread
[Properties (by Name)][Methods (by Name)][Events (by Name)]
Abstract Thread class.
Declaration
Source position: classesh.inc line 1860
Type
  TThread = class
  private
    PThreadQueueEntry = ^TThreadQueueEntry;
    TThreadQueueEntry = record
      Method : TThreadMethod;
      Thread : TThread;
      ThreadID : TThreadID;
      Exception : TObject;
      SyncEvent : PRTLEvent;
      Next : PThreadQueueEntry;
    end
    ;
  public
    TSystemTimes = record
      IdleTime : QWord;
      UserTime : QWord;
      KernelTime : QWord;
      NiceTime : QWord;
    end
    ;
  private
    FProcessorCount : LongWord;
    FHandle : TThreadID;
    FTerminated : Boolean;
    FFreeOnTerminate : Boolean;
    FFinished : Boolean;
    FSuspended : LongBool;
    FReturnValue : Integer;
    FOnTerminate : TNotifyEvent;
    FFatalException : TObject;
    FExternalThread : Boolean;
    FSynchronizeEntry : PThreadQueueEntry;
    class function GetCurrentThread : TThread;  Static;
    class function GetIsSingleProcessor : Boolean;  Static;
    class procedure InternalQueue(aThread: TThread; aMethod: TThreadMethod; 
                                 aQueueIfMain: Boolean);  Static;
    procedure CallOnTerminate;
    function GetPriority : TThreadPriority;
    procedure SetPriority(Value: TThreadPriority);
    procedure SetSuspended(Value: Boolean);
    function GetSuspended : Boolean;
    procedure InitSynchronizeEvent;
    procedure DoneSynchronizeEvent;
    procedure SysCreate(CreateSuspended: Boolean; const StackSize: SizeUInt);
    procedure SysDestroy;
  protected
    FThreadID : TThreadID;
    procedure DoTerminate;  Virtual;
    procedure TerminatedSet;  Virtual;
    procedure Execute;  Virtual;  Abstract;
    procedure Synchronize(AMethod: TThreadMethod);
    class procedure Synchronize(AThread: TThread; AMethod: TThreadMethod);
    procedure Queue(aMethod: TThreadMethod);
    class procedure Queue(aThread: TThread; aMethod: TThreadMethod);  Static;
    procedure ForceQueue(aMethod: TThreadMethod);
    class procedure ForceQueue(aThread: TThread; aMethod: TThreadMethod)
                              ;  Static;
    ReturnValue : Integer;
    Terminated : Boolean;
  private
    FSuspendEvent : PRTLEvent;
    FInitialSuspended : Boolean;
    FSuspendedInternal : longbool;
    FThreadReaped : Boolean;
  public
    constructor Create(CreateSuspended: Boolean; const StackSize: SizeUInt);
    destructor Destroy;  Override;
    class function CreateAnonymousThread(aProc: TProcedure) : TThread
                                        ;  Static;
    class procedure NameThreadForDebugging(aThreadName: UnicodeString; 
                                          aThreadID: TThreadID);  Static;
    class procedure NameThreadForDebugging(aThreadName: AnsiString; 
                                          aThreadID: TThreadID);  Static;
    class procedure SetReturnValue(aValue: Integer);  Static;
    class function CheckTerminated : Boolean;  Static;
    class procedure RemoveQueuedEvents(aThread: TThread; 
                                      aMethod: TThreadMethod);  Static;
    class procedure RemoveQueuedEvents(aMethod: TThreadMethod);  Static;
    class procedure RemoveQueuedEvents(aThread: TThread);  Static;
    class procedure SpinWait(aIterations: LongWord);  Static;
    class procedure Sleep(aMilliseconds: Cardinal);  Static;
    class procedure Yield;  Static;
    class procedure GetSystemTimes(out aSystemTimes: TSystemTimes);  Static;
    class function GetTickCount : LongWord;  Static;
    class function GetTickCount64 : QWord;  Static;
    class function ExecuteInThread(AMethod: TThreadExecuteHandler; 
                                  AOnTerminate: TNotifyEvent) : TThread
                                  ;  Overload;  Static;
    class function ExecuteInThread(AMethod: TThreadExecuteStatusHandler; 
                                  AOnStatus: TThreadStatusNotifyEvent; 
                                  AOnTerminate: TNotifyEvent) : TThread
                                  ;  Overload;  Static;
    class function ExecuteInThread(AMethod: TThreadExecuteCallBack; 
                                  AData: Pointer; 
                                  AOnTerminate: TNotifyCallBack) : TThread
                                  ;  Overload;  Static;
    class function ExecuteInThread(AMethod: TThreadExecuteStatusCallBack; 
                                  AOnStatus: TThreadStatusNotifyCallBack; 
                                  AData: Pointer; 
                                  AOnTerminate: TNotifyCallBack) : TThread
                                  ;  Overload;  Static;
    procedure AfterConstruction;  Override;
    procedure Start;
    procedure Resume;
    procedure Suspend;
    procedure Terminate;
    function WaitFor : Integer;
    CurrentThread : TThread;
    ProcessorCount : LongWord;
    IsSingleProcessor : Boolean;
    FreeOnTerminate : Boolean;
    Handle : TThreadID;
    ExternalThread : Boolean;
    Priority : TThreadPriority;
    Suspended : Boolean;
    Finished : Boolean;
    ThreadID : TThreadID;
    OnTerminate : TNotifyEvent;
    FatalException : TObject;
  end
  ;
Description
The TThread class encapsulates the native thread support of the operating system. To create a thread, declare a descendant of the TThread object and override the Execute method. In this method, the tthread's code should be executed. To run a thread, create an instance of the tthread descendant, and call it's execute method.
It is also possible to simply execute a method or static procedure in a thread using the TThread.ExecuteInThread class method.
Members
| Member | Type | Visibility | Description | 
|---|---|---|---|
| AfterConstruction | Method | public | Code to be executed after construction but before execute. | 
| CallOnTerminate | Method | private | |
| CheckTerminated | Method | public | Check if the current thread has finished executing. | 
| Create | Method | public | Creates a new thread. | 
| CreateAnonymousThread | Method | public | Execute code in an anonymous thread | 
| CurrentThread | Property | public | Return current thread instance | 
| Destroy | Method | public | Destroys the thread object. | 
| DoneSynchronizeEvent | Method | private | |
| DoTerminate | Method | protected | Terminates the thread. | 
| Execute | Method | protected | Execute method. Must be overridden in a descendant thread. | 
| ExecuteInThread | Method | public | Execute a method or static procedure in a thread | 
| ExternalThread | Property | public | Is the thread instance an external thread ? | 
| FatalException | Property | public | Exception that occurred during thread execution | 
| FExternalThread | Field | private | |
| FFatalException | Field | private | |
| FFinished | Field | private | |
| FFreeOnTerminate | Field | private | |
| FHandle | Field | private | |
| Finished | Property | public | Has the thread finished executing | 
| FInitialSuspended | Field | private | |
| FOnTerminate | Field | private | |
| ForceQueue | Method | protected | |
| FProcessorCount | Field | private | |
| FreeOnTerminate | Property | public | Indicates whether the thread should free itself when it stops executing. | 
| FReturnValue | Field | private | |
| FSuspended | Field | private | |
| FSuspendedInternal | Field | private | |
| FSuspendEvent | Field | private | |
| FSynchronizeEntry | Field | private | |
| FTerminated | Field | private | |
| FThreadID | Field | protected | |
| FThreadReaped | Field | private | |
| GetCurrentThread | Method | private | |
| GetIsSingleProcessor | Method | private | |
| GetPriority | Method | private | |
| GetSuspended | Method | private | |
| GetSystemTimes | Method | public | Return CPU stats | 
| GetTickCount | Method | public | Return tick count (32-bit) | 
| GetTickCount64 | Method | public | Return tick count (64-bit) | 
| Handle | Property | public | Returns the thread handle. | 
| InitSynchronizeEvent | Method | private | |
| InternalQueue | Method | private | |
| IsSingleProcessor | Property | public | Is the current system single processor or not | 
| NameThreadForDebugging | Method | public | Set a thread name | 
| OnTerminate | Property | public | Event called when the thread terminates. | 
| Priority | Property | public | Returns the thread priority. | 
| ProcessorCount | Property | public | Return the processor count for this system | 
| PThreadQueueEntry | Type | private | |
| Queue | Method | protected | Queue a method for execution in the main thread | 
| RemoveQueuedEvents | Method | public | Remove methods scheduled for execution from queue | 
| Resume | Method | public | Resumes the thread's execution. Deprecated, see TThread.Start | 
| ReturnValue | Property | protected | Return value of the thread when it stops executing. | 
| SetPriority | Method | private | |
| SetReturnValue | Method | public | Set return value of a thread | 
| SetSuspended | Method | private | |
| Sleep | Method | public | Prevent thread execution | 
| SpinWait | Method | public | Prevent thread execution in a spin-wait loop | 
| Start | Method | public | Starts a thread that was created in a suspended state. | 
| Suspend | Method | public | Suspends the thread's execution. | 
| Suspended | Property | public | Indicates whether the thread is suspended. | 
| Synchronize | Method | protected | Synchronizes the thread by executing the method in the main thread. | 
| SysCreate | Method | private | |
| SysDestroy | Method | private | |
| Terminate | Method | public | Signals the thread it should terminate. | 
| Terminated | Property | protected | Indicates whether the Terminate method was called by the user. | 
| TerminatedSet | Method | protected | |
| ThreadID | Property | public | Returns the thread ID. | 
| TSystemTimes | Type | public | Record for returning processor usage | 
| TThreadQueueEntry | Type | private | |
| WaitFor | Method | public | Waits for the thread to terminate and returns the exit status. | 
| Yield | Method | public | Yield execution to other threads | 
Inheritance
| Class | Description | 
|---|---|
| TThread | Abstract Thread class. | 
See also
| Name | Description | 
|---|---|
| EThread | Thread error exception. | 
| Integer | A signed 16-bits integer | 
| Integer | A signed 16-bits integer | 
| LongWord | An unsigned 32-bits integer | 
| LongWord | An unsigned 32-bits integer | 
| PRTLEvent | Pointer to RTLEvent, which is an opaque type. | 
| TNotifyEvent | Standard event handler type. | 
| TNotifyEvent | Standard event handler type. | 
| TObject | Base class of all classes. | 
| TObject | Base class of all classes. | 
| TThread | Abstract Thread class. | 
| TThread.Execute | Execute method. Must be overridden in a descendant thread. | 
| TThread.ExecuteInThread | Execute a method or static procedure in a thread | 
| TThreadID | Type for Thread-IDs | 
| TThreadID | Type for Thread-IDs | 
| TThreadID | Type for Thread-IDs | 
| TThreadID | Type for Thread-IDs | 
| TThreadPriority | Enumeration specifying the priority at which a thread runs. |