BTW: Please note that since you can keep adding executions to the task, it can be done in nested loops, as well as in function calls thus doing fully fledged parallelization. The executor also can be single thread, unlimited threads, self balancing, or limited pool depending on the specific instance, so a very fine control can be exercised over the execution, as well as it can be changed dynamically by code, thus sometime executing the code with one executor and other times with another, based on the specific needs.

Adding simple parallel loop lacks any of this power, and only serves very specific cases.

With best regards,
Boian Mitov

-------------------------------------------------------
Mitov Software
www.mitov.com
-------------------------------------------------------
-----Original Message----- From: Boian Mitov
Sent: Monday, September 22, 2014 11:54 AM
To: FPC developers' list
Subject: Re: [fpc-devel] Suggestion: reference counted objects

Here is example from our implementation:

for AIndex := 0 to Length( AList ) - 1 do
 AExecutionTask.Add(
     FExecutor.Execute(
         TDelegate.Capture<Integer>( AIndex,
             procedure( ALocalIndex : Integer )
             begin
               Sleep( 1000 ); // Simulate thread busy doing time consuming
task
               AList[ ALocalIndex ] := ALocalIndex * 2;
             end
           )
       )
   );

AExecutionTask.WaitFor();



With best regards,
Boian Mitov

-------------------------------------------------------
Mitov Software
www.mitov.com
-------------------------------------------------------

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to