[Lazarus] local procedure - MultiThreadProc
Vincent Snijders
vsnijders at vodafonevast.nl
Wed Aug 19 13:41:00 CEST 2009
Martin schreef:
> Mattias Gärtner wrote:
>> Zitat von Jan Kowalski <bor400 at 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.
>
> 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
Vincent
More information about the Lazarus
mailing list