[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