f23fc38433
git-svn-id: svn://kolibrios.org@616 a494cfbc-eb01-0410-851d-a64ba20cac60
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;
|