Mattias Gärtner wrote:
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.

Sorry badly worded on my behalf.

It makes no sense, should have been: it can not be used the same way like normal procedure references, because it is limited to the scope.
the way described on the link by Vincent indeed makes sense

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


--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to