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

最新文章

  1. Extjs Panel
  2. IDEA之maven(springmvc)项目
  3. cogs896 圈奶牛
  4. JavaScript 正则表达式相关理解
  5. jav利用反射修改类的静态变量
  6. php&mysql
  7. tar.xz 文件如何解压
  8. 《Windows游戏编程技巧大师》就DirectDraw而创建DirectDraw知识笔记
  9. MyBatis-plus 代码自动生成器
  10. 双11电商剁手节,最全的H5互动营销案例合集
  11. jsp的语法
  12. Django+xadmin打造在线教育平台(八)
  13. .net 获取配置文件AppSettings的键值
  14. CodeForces 868F Yet Another Minimization Problem(决策单调性优化 + 分治)
  15. Django上传文件和上传图片(不刷新页面)
  16. scrapy_splash模块解析动态js
  17. VUE CLI 3.0 项目引入 Mock.js
  18. python第二天 列表、元组
  19. [BZOJ2639]矩形计算
  20. 微信小程序wx.switchTab传参问题

热门文章

  1. poj 1979 走多少个‘ . '问题 dfs算法
  2. 2019 study list
  3. 3224: Tyvj 1728 普通平衡树(新板子)
  4. luogu2590 [ZJOI2008]树的统计
  5. 27、android log日志
  6. 大数据学习——KETTLE入门学习——kettle安装
  7. 【185天】黑马程序员27天视频学习笔记【Day14-下】
  8. 爬虫Scrapy框架-1
  9. Django模板导入和替换、以及对数据库的增加、查看
  10. linux下文件显示被加锁如何解决?