forked from KolibriOS/kolibrios
96 lines
1.6 KiB
PHP
96 lines
1.6 KiB
PHP
|
{ TODO }
|
||
|
{ Thread management routines }
|
||
|
|
||
|
type
|
||
|
PRaiseFrame = ^TRaiseFrame;
|
||
|
TRaiseFrame = record
|
||
|
NextRaise: PRaiseFrame;
|
||
|
ExceptAddr: Pointer;
|
||
|
ExceptObject: TObject;
|
||
|
ExceptionRecord: pointer; {PExceptionRecord}
|
||
|
end;
|
||
|
|
||
|
var
|
||
|
ThreadCount: Integer;
|
||
|
|
||
|
|
||
|
procedure AddThread;
|
||
|
begin
|
||
|
InterlockedIncrement(ThreadCount);
|
||
|
end;
|
||
|
|
||
|
procedure RemoveThread;
|
||
|
begin
|
||
|
InterlockedDecrement(ThreadCount);
|
||
|
end;
|
||
|
|
||
|
constructor TThread.Create(CreateSuspended: Boolean; const StackSize: SizeUInt = DefaultStackSize);
|
||
|
begin
|
||
|
inherited Create;
|
||
|
AddThread;
|
||
|
FSuspended := CreateSuspended;
|
||
|
{TODO}
|
||
|
FFatalException := nil;
|
||
|
end;
|
||
|
|
||
|
destructor TThread.Destroy;
|
||
|
begin
|
||
|
if not FFinished and not Suspended then
|
||
|
begin
|
||
|
Terminate;
|
||
|
WaitFor;
|
||
|
end;
|
||
|
FFatalException.Free;
|
||
|
FFatalException := nil;
|
||
|
inherited Destroy;
|
||
|
RemoveThread;
|
||
|
end;
|
||
|
|
||
|
procedure TThread.CallOnTerminate;
|
||
|
begin
|
||
|
FOnTerminate(Self);
|
||
|
end;
|
||
|
|
||
|
procedure TThread.DoTerminate;
|
||
|
begin
|
||
|
if Assigned(FOnTerminate) then
|
||
|
Synchronize(@CallOnTerminate);
|
||
|
end;
|
||
|
|
||
|
function TThread.GetPriority: TThreadPriority;
|
||
|
begin
|
||
|
{TODO}
|
||
|
end;
|
||
|
|
||
|
procedure TThread.SetPriority(Value: TThreadPriority);
|
||
|
begin
|
||
|
{TODO}
|
||
|
end;
|
||
|
|
||
|
procedure TThread.SetSuspended(Value: Boolean);
|
||
|
begin
|
||
|
if Value <> FSuspended then
|
||
|
if Value then Suspend else Resume;
|
||
|
end;
|
||
|
|
||
|
procedure TThread.Suspend;
|
||
|
begin
|
||
|
FSuspended := True;
|
||
|
SuspendThread(FHandle);
|
||
|
end;
|
||
|
|
||
|
procedure TThread.Resume;
|
||
|
begin
|
||
|
if ResumeThread(FHandle) = 1 then FSuspended := False;
|
||
|
end;
|
||
|
|
||
|
procedure TThread.Terminate;
|
||
|
begin
|
||
|
FTerminated := True;
|
||
|
end;
|
||
|
|
||
|
function TThread.WaitFor: Integer;
|
||
|
begin
|
||
|
{TODO}
|
||
|
end;
|