Zitat von Vincent Snijders <vsnijd...@vodafonevast.nl>:
Martin schreef:
Mattias Gärtner wrote:
Zitat von Jan Kowalski <bor...@gmail.com>:
I need to call ProcThreadPool.DoParallel with "local" procedure
as a parameter.
Does DoParallel allow local procedures to pass a procedural parameters ?
I get err: Error:
Incompatible type for arg no. 1: Got "<address of local
procedure(Int64,Pointer,TMultiThreadProcItem);Register>", expected
"<procedure variable type of
procedure(Int64,Pointer,TMultiThreadProcItem);Register>"
That would be really helpful.
But I don't know how to define a local procedure type:
I wouldn't be sure it's possible. It makes no sense.
It makes enough sense in this case.
For example when you want to execute a loop in parallel, then you
extract the loop into a procedure. With a local procedure you can keep
the variables, which would make the process quite easy. If you can not
use a local procedure, then you must define a record and move the
local variables there.
Of course nested local procedures creates a whole bunch of problems,
so maybe the record approach is much safer.
Maybe the extract procedure tool can be extended to do some of the
monotone work automatically.
I will explain the process in more detail on the wiki.
My guess:
A local (nested) procedure has access to the outer(parent or
grand-parent if recursive) procedures variables (stackframe).
Therefore a local procedure must expect to be somewhere below this
parent.
If it was given as a pointer to some other procedure/object, and
then called later, this may happen outside the parent. Then no such
stackframe does exist, and the local procedure can not work.
And therefore such a local procedure type must be a combination of
local scope and address:
http://wiki.freepascal.org/Mac_Local_Procedure_Parameters
This feature is not yet implemented:
http://wiki.freepascal.org/Language_related_articles#Ideas_for_new_stuff
Mattias
--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus