[fpc-pascal] using mtprocs
John Lee
johnelee0 at gmail.com
Fri Apr 19 01:39:03 CEST 2013
Thanks - however, my attempt to modify the test program by adding the exec
as below so it works in 'parallel' with the main program doesn't work, so I
must have missed something.
program Test;
{$mode objfpc}{$H+}
uses windows,classes, dos, crt, sysutils,MTProcs;
var j:longint;
// a simple parallel procedure
procedure DoSomethingParallel(Index: PtrInt; Data: Pointer; Item:
TMultiThreadP♦
var
i: Integer;
begin
writeln(Index);
if index=1 then
begin
//this compression, using arc (but it could be 7z takes 30 secs)
exec('c:\windows\system32\cmd','/c c:\utils\arc a -mx tmp
c:\live_sol\ans.dat');
exit;
end;
for i:=1 to Index*1000000 do ; // do some work
end;
begin
ProcThreadPool.DoParallel(@DoSomethingParallel,1,5,nil); // address,
startind♦
//main prog eg capturing the xml
for j:=1 to 10 do
begin write(j,' '); sleep(10000); end;
end.
John
> > I have a program that captures xml data every 2-6 secs from a power
> sensor,
> > win , xp. Would like to use freearc ebvery minute or so to compress the
> > previous data in parallel w/o stopping the capture. Running arc from cmd
> > line using exec eg exec('/c arc.exe outfile infile'); The compression may
> > take 30 secs or so.
> >
> > Is using mtprocs as in
> > http://wiki.lazarus.freepascal.org/Parallel_procedures#Getting_MTProcs
> >
> > the best way to do this? Or threads. Any other ideas?
>
> mtprocs uses TThreads.
> It creates them on demand and only once and destroys them at the end of
> the program. If there is nothing to do the threads are waiting using no
> CPU cycles and can wake up very quickly. So they are like light weight
> threads.
> The nice thing is that mtprocs tries to guess the number of cores and
> automatically creates this amount of threads. You can limit the number
> of threads or create more if you want. You can free the threads.
> I use mtprocs for several xml servers. One server for example
> reads files with 12 cores in parallel, scaling nicely.
> Another program of mine starts 100 pings in parallel.
> mtprocs supports recursion and exceptions.
> And it is written entirely in FPC, so it works X-platform.
>
> Mattias
> _______________________________________________
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20130419/5be2404d/attachment.html>
More information about the fpc-pascal
mailing list