zoukankan      html  css  js  c++  java
  • DELPHI是怎么实现跨平台的?

    DELPHI是怎么实现跨平台的?

    首先跨平台必须要兼容原来的语法,以线程的临界区对象为例:

    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}跨平台编译开关,增加了跨平台的封装。

    下面再以线程类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;

    。。。。。。

    也和临界区类一样用跨平台编译开关封装了跨平台代码进来。

    从上面的2个例子可以看出,DELPHI为了跨平台,对RTL进行了艰苦卓绝的巨大修改,这个工程无疑是浩大的。

  • 相关阅读:
    IOC容器特性注入第六篇:利用MVC注入点,把容器启动
    IOC容器特性注入第五篇:查找(Attribute)特性注入
    以女朋友为例讲解 TCP/IP 三次握手与四次挥手
    Kali信息收集
    Python3 异常处理
    Python3 hasattr()、getattr()、setattr()、delattr()函数
    Python3 常用模块
    Python设计模式——外观模式
    Python设计模式——模版方法模式
    一个很神奇的类
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/6635055.html
Copyright © 2011-2022 走看看