On 09.02.2014 15:46, Jürgen Hestermann wrote:
Am 2014-02-09 15:10, schrieb Fred van Stappen: > > if length(MyArray) > 0 then > > for x := 0 to high(MyArray) do > > MyArray[x].Free;As I have learned just recently ;-) this code could be shortened by for x := low(MyArray) to high(MyArray) do MyArray[x].Free; if x is a signed integer. So you would save the length check.
Or: for arrayelem in MyArray do arrayelem.Free;
> Because the threads are already freed (yes/no) ? Yes, that's tricky. *Some* (managed) data structures like ansistrings and dynamic arrays are freed by the compiler. But if you requested memory by yourself (new, getmem) then you need to clean it up yourself too. I am not sure what applies to threads but I would think that they are managed by the compiler so that a setlength(MyArray,0) would automatically free all (automatically) allocated data.
Threads themselves are normal class instances. Normal class instances need to be freed manually (we don't have ARC for class instances yet). Threads however implement a "FreeOnTerminate" property that tells the thread to free itself once it terminates. In this case you must not free the thread yourself (and at best don't touch the class instance variable anymore after you used "Start", because the thread might already be terminated by that point and thus the instance freed).
Regards, Sven _______________________________________________ fpc-pascal maillist - [email protected] http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
