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.