A portable and efficient implementation of a future in Delphi and FreePascal

A portable and efficient implementation of a future in Delphi and FreePascal version 1.32

Author: Amine Moulay Ramdane.

Description:

A "future" is an object that promises to provide a value sometime in the future. The value is computed in a background thread. When the application needs the value, it requests the value from the future--if the future isn't done, the application waits until the value is ready. 

I have also added support for exceptions, so you have to know that programming with futures is asynchronous programming, but so that to be robust the future implementation has to deal correctly with "exceptions", so in my implementation of a future when an exception is raised inside the future you will receive the exception, so i have implemented two things: The HasException() method so that to detect the exception from inside the future, and the exception and its address is returned as a string in the ExceptionStr property, and my implementation of a future does of course support passing parameters as a pointer to the future, also my implementation of a future works in Windows and Linux.

All the synchronization issues are hidden from the application. 

Use the TFuture class by deriving a new class that overrides the Compute method. 

I have provided you with a demo inside the zip file, please look at it inside testfuture.pas file.

You can go to download the zip files from:

https://drive.google.com/drive/folders/1GMEYVM1EIUDuD4I0PcYtZXyhg8Ig73zO?usp=sharing

Language: FPC Pascal v2.2.0+ / Delphi 5+: http://www.freepascal.org/

Required FPC switches: -O3 -Sd 

-Sd for delphi mode.... 

Required Delphi XE-XE7 and Tokyo switch: -$H+ -DXE

You can configure it as follows from inside defines.inc file:

{$DEFINE CPU32} and {$DEFINE Windows32} for 32 bit systems

{$DEFINE CPU64} and {$DEFINE Windows64} for 64 bit systems

- Platform:  Windows, Unix and Linux (x86)