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进行了艰苦卓绝的巨大修改,这个工程无疑是浩大的。

  • 相关阅读:
    《秒杀系统架构分析与实战 》
    《豆瓣的基础架构》
    转--《亿级用户下的新浪微博平台架构 》
    转-《蚂蚁金服11.11:支付宝和蚂蚁花呗的技术架构及实践 》
    hdu2029
    hdu2027
    hdu2026(water~~)
    PHP电影小爬虫(2)
    今天来做一个PHP电影小爬虫。
    PHP Simple HTML DOM解析器
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/6635055.html
Copyright © 2011-2022 走看看