DELPHI是怎麼實現跨平臺的?

DELPHI是怎麼實現跨平臺的?ide

首先跨平臺必需要兼容原來的語法,以線程的臨界區對象爲例:ui

TCriticalSection = class(TSynchroObject)
{$IFDEF POSIX}
private type
TCritSec = record
FSync: TObject;
procedure Initialize; inline;
procedure Free; inline;
procedure Enter; inline;
procedure Leave; inline;
function TryEnter: Boolean; inline;
end;
{$ENDIF POSIX}
protected
{$IFDEF MSWINDOWS}
FSection: TRTLCriticalSection;
{$ENDIF MSWINDOWS}
{$IFDEF POSIX}
FSection: TCritSec;
{$ENDIF POSIX}
public
constructor Create;
destructor Destroy; override;
procedure Acquire; override;
procedure Release; override;
function TryEnter: Boolean;
procedure Enter; inline;
procedure Leave; inline;
end;線程

能夠看出,已經不單是原來的從WINDOWS OS臨界封裝,經過{$IFDEF POSIX}跨平臺編譯開關,增長了跨平臺的封裝。orm

 

下面再以線程類TThread爲例:對象

TThread = class
private type
PSynchronizeRecord = ^TSynchronizeRecord;
TSynchronizeRecord = record
FThread: TObject;
FMethod: TThreadMethod;
FProcedure: TThreadProcedure;
FSynchronizeException: TObject;
end;
private class var
FProcessorCount: Integer;
private
FThreadID: TThreadID;
{$IF Defined(MSWINDOWS)}
FHandle: THandle platform;
{$ELSEIF Defined(POSIX)}
FCreateSuspendedMutex: pthread_mutex_t;
FInitialSuspendDone: Boolean;
{$ENDIF POSIX}
FStarted: Boolean;
FCreateSuspended: Boolean;
FTerminated: Boolean;
FSuspended: Boolean;
FFreeOnTerminate: Boolean;
FFinished: Boolean;
FReturnValue: Integer;it

。。。。。。io

也和臨界區類同樣用跨平臺編譯開關封裝了跨平臺代碼進來。編譯

從上面的2個例子能夠看出,DELPHI爲了跨平臺,對RTL進行了堅苦卓絕的巨大修改,這個工程無疑是浩大的。function

相關文章
相關標籤/搜索