Delphiスレッドの概要とそのcreateメソッド

2090 ワード

TThreadのClassesユニットでの声明は以下の通りです.
type

    TThread = class

    private

        FHandle: THandle;

        FThreadID: THandle;

        FTerminated: Boolean;

        FSuspended: Boolean;

        FFreeOnTerminate: Boolean;

        FFinished: Boolean;

        FReturnValue: Integer;

        FOnterminate: TNotifyEvent;

        FMethod: TThreadMethod;

        FSynchronizeException: TObject;

        procedure CallOnTerminate;

        function GetPriority: TThreadPriority;

        procedure SetPriority(Value: TThreadPriority);

        procedure SetSuspended(value: Boolean);

    protected

        procedure DoTerminate; virtual;

        procedure Execute; virtual; abstract;

        procedure Synchronize(Method: TThreadMethod);

        property ReturnValue: Integer read FReturnValue write FReturnValue;

        property Terminated: Boolean read FTerminated;

    public 

        constructor Create(CreateSuspended: Boolean);

        destructor Destroy; override;

        procedure Resume;

        procedure Terminate;

        function WaitFor: Integer;

        property FreeOnTerminate: Boolean read FFreeOnTerminate write FFreeOnTerminate;

        property Handle: THandle read FHandle;

        property Priority: TThreadPriority read GetPriority write SetPriority;

        property Suspended: Boolean read FSuspended write Suspended;

        property ThreadID: THandle read FThreadID;

        property OnTerminate: TNotifyEvent read FOnTerminate write FOnTerminate;

    end;


  
TThreadのCreate()が呼び出されると,ブール型のパラメータCreateSuspendedを渡す必要がある.このパラメータをFalseに設定すると、Create()を呼び出すとExecute()が自動的に呼び出され、スレッドコードが自動的に実行されます.このパラメータがTrueに設定されている場合は、スレッドを起動するためにTThreadのResume()を実行する必要があります.
一般的に、Create()を呼び出すと、他にもいくつかのプロパティ要件が設定されます.したがって、TThreadが既に実行されている場合、TThreadのプロパティを設定すると面倒になる可能性があるため、CreateSuspendedパラメータをTrueに設定する必要があります.
詳細については、コンストラクション関数Create()には、RTLインスタンスBeginThread()の呼び出しが隠されており、スレッドオブジェクトのインスタンスを作成するためにAPI関数CreateThread()が呼び出されています.CreateSuspendedパラメータはCREATE_を渡すかどうかを示します.SUSPENDEDマークはCreateThread()に与えられます.