[Lazarus] local procedure - MultiThreadProc
Florian Klaempfl
florian at freepascal.org
Wed Aug 19 17:33:59 CEST 2009
Mattias Gärtner schrieb:
> Zitat von Vincent Snijders <vsnijders at vodafonevast.nl>:
>
>> 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.
>
> 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.
You can create a thread call for local procedures, it needs some hacking
though: no type checking is possible, you've to work with pointers and
pass the context explicitly.
More information about the Lazarus
mailing list