Which thread is in control when?
| Main Thread | Background Thread | |
| X | |
TwhAsyncAction.OnInit |
| | X |
TwhAsyncAction.OnExecute |
| | X |
TwhAsyncAction.OnFinish |
| X | |
TwhAsyncObject.OnSynchronized
Very special case! |
| X | |
TwhAsyncAction.OnDestroy |
TwhAsyncAction = class(TwhWebActionEx)
private
fAsyncState: TAsyncState;
fSurfersThread: TwhAsyncThread;
fThreadClass: TwhAsyncThreadClass;
fSurfersObject: TwhAsyncObject;
fObjectClass: TwhAsyncObjectClass;
fThreadOnInit,
fThreadOnExecute,
fThreadOnFinish,
fThreadOnDestroy: TNotifyEvent;
fJobsPending: ThtListOfObjects;
fJobsFinished: ThtListOfObjects;
fTicksExpires,
fRefreshInterval,
fResultValue:Integer;
fBackgroundTasks: ThtBackgroundTaskThread;
protected
hcNextStart: integer;
hcIndex: integer;
hcList: ThtListOfObjects;
procedure HouseClean(Sender: TObject);
procedure DoExecute; override;
public
constructor Create(aOwner:TComponent); Override;
destructor Destroy; override;
//
procedure NewThread; // makes new thread using the 'ThreadClass'
procedure Aborted; // abort NewThread
//
function FindSession(const Session:string):Boolean;
function FindResult(const Session:string;var Index:Integer):Boolean;
procedure UnlistObject(Sender: TObject);
//
property SurfersObject: TwhAsyncObject read fSurfersObject write fSurfersObject;
property SurfersThread: TwhAsyncThread read fSurfersThread write fSurfersThread;
property BackgroundTasks: ThtBackgroundTaskThread read fBackgroundTasks write fBackgroundTasks;
published
property ResultValue: Integer read fResultValue;
property RefreshInterval: Integer read fRefreshInterval write fRefreshInterval;
property TicksExpires: Integer read fTicksExpires write fTicksExpires;
//
//
property AsyncState: TAsyncState read fAsyncState write fAsyncState;
property ThreadClass: TwhAsyncThreadClass read fThreadClass write fThreadClass;
property ObjectClass: TwhAsyncObjectClass read fObjectClass write fObjectClass;
//
property ThreadOnInit: TNotifyEvent read fThreadOnInit write fThreadOnInit;
property ThreadOnFinish: TNotifyEvent read fThreadOnFinish write fThreadOnFinish;
property ThreadOnExecute: TNotifyEvent read fThreadOnExecute write fThreadOnExecute;
property ThreadOnDestroy: TNotifyEvent read fThreadOnDestroy write fThreadOnDestroy;
end;