1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils, System.Threading, System.SyncObjs, AppConsole;
const
Restart :TSelectOption = (Text:'Recommencer Parallèle ? [O/N]'; Options:['O', 'N']; Color:Console.White);
begin
Randomize;
//--------------------------------------------------------------------------------------------------
// Séquentiel
Console.WriteHeader('Exécution séquentielle');
Console.Write('Test1:', Console.Purple);
Console.WriteTask('Execution Sync 1',
function :boolean
begin
Console.WriteLn('Ceci est un avertissement', Console.DarkYellow);
Result := TRUE;
end);
Console.Write('Test2:', Console.Purple);
Console.WriteTask('Execution Sync 2',
function :boolean
begin
Console.WriteLn('Ceci est une erreur', Console.Red);
Result := FALSE;
end);
//--------------------------------------------------------------------------------------------------
// Parallèle
while True do
begin
Console.WriteHeader('Exécution Parallèle');
var Error := 0;
TParallel.For(1, 10,
procedure(aID :integer)
begin
if not Console.WriteTask('Execution du job N°' +aID.ToString,
function :boolean
begin
// Travail
Sleep(Random(10) *1000);
// Erreur ?
Result := Random(15) <> 0;
end) then TInterlocked.Increment(Error);
end);
WriteLn;
if Error > 0
then Console.WriteLn('Exécution parallèle terminée avec erreur', Console.Red)
else Console.WriteLn('Exécution parallèle terminée sans erreur', Console.Green);
WriteLn;
Console.WriteRule;
WriteLn;
if Console.WaitInput(Restart) = 'N' then Exit;
Console.Clear;
end;
end. |
Partager