Newsgroup: it.comp.lang.delphi
Titolo: Re: Threads e oggetti con PostThreadMessage

(forse) in quel paese tutto questo metodo?
Non esiste garbage collection in Delphi. Forse, prima di avventurarti
in applicazioni complesse, fai bene ad approfondire la conoscenza
dell'ambiente/linguaggio.

Salve, vi scrivo per porvi un quesito di cui non riesco a venirne a capo.
Sto lavorando ad un software socket che dovrebbe ricevere dei pacchetti 
che iniziano per "0x13" e dovrei accodare dei messaggi in Queue del 
thread affinchè questo thread esegua varie funzioni e controlli su questo 
pacchetto. Uso un thread separato perchè non necessito della 
sincronicità..voglio solo che li riceva al 100% TUTTI e che pian-pianino 
faccia le sue cosette.
Attualmente ho creato una struttura dati che forma ogni pacchetto da 
accodare:
-----------
type
  TPacketProcessorPacket = class(TObject)
  protected
  private
  public
    Packet : TArrayOfChar;
    PacketSize : integer;
  end;
-----------
L'accodamento nella Queue del thread la faccio così:
-----------
var PacketProcessorPacket : TPacketProcessorPacket;
begin
  PacketProcessorPacket             := TPacketProcessorPacket.Create;
  PacketProcessorPacket.Packet      := buffer;
  PacketProcessorPacket.PacketSize  := size;
  PostThreadMessage(ThreadID, TH_MESSAGE_TO_THREAD, TH_PACKET_PROCESSOR, 
Integer(PacketProcessorPacket));
end;
-----------
Volevo chiedere: sono sicuro al 100% che, dopo (esempio) 3 giorni, la 
struttura dati "PacketProcessorPacket", a cui si riferisce il 500esimo 
messaggio in Queue del thread, esista?
Per "Garbage Collection" Delphi non libera (forse) la memoria mandandomi 
(forse) in quel paese tutto questo metodo?
Avevo pensato anche a creare una coda TObjectList a cui accodare tramite 
PUSH un oggetto discendente da TObject contente i due valori della 
suddetta struttura dati. Dite che funziona meglio?
Tutto questo nasce dal fatto che in certi momenti NON DEFINITI ricevo 
un'exception di "lettura memoria XXXX" proprio nel momento in cui vedo 
l'arrivo di un messaggio da accodare...ma non è debuggabile in nessun 
modo.
Grazie,
-emandt-
--- posted by geoForum on 
http://www.delphiedintorni.it

Pensavo interpretaste di più quello che ho scritto...
--------------- Fonte 
(
http://en.wikipedia.org/wiki/Reference_counting#Delphi
)
One language that uses reference counting for garbage collection is 
Delphi. Delphi is not a completely garbage collected language, in that 
user-defined types must still be manually allocated and deallocated. It 
does provide automatic collection, however, for a few built-in types, 
such as strings, dynamic arrays and interfaces.
---------------
In qualsiasi modo lo si chiami, anche Delphi esegue una pulizia della 
memoria che non è più referenziata/in-uso.
Vabbè, lasciamo perdere.
A me interessava risolvere il problema e non ricevere bacchetate per come 
scrivo in italiano :/
Se io creo un oggetto OGGI in una funzione, e tra 5gg accedo al puntatore 
di quel oggetto da un suo Thread, troverò l'oggetto integro?


 di quel oggetto da un suo Thread, troverò l'oggetto integro?
La risposta è sì, perchè se non hai mai chiuso il programma ed esiste
ancora in memoria almeno un riferimento all'oggetto, il compilatore non
chiamerà la dispose di quel riferimento.
-- 
Morde

 di quel oggetto da un suo Thread, troverò l'oggetto integro?
Certo che lo troverai integro, in tuo problema, invece, sarà quello di 
rilasciarlo. Delphinon ha un vero garbage collector, è tuo 
compito/dovere gestire la memoria.

 programmazione, non l'italiano :)
Pini, non c'č niente di sgarbato in quello che ho scritto.
Vedi di darti una calmata coi giudizi.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 di quel oggetto da un suo Thread, troverò l'oggetto integro?
Sì. E comunque la cosa è vera anche coi sistemi con garbage collection:
non è questione di tempo; finquando hanno ragione di credere che l'oggetto
verrà utilizzato, non lo liberano.


 Vedi di darti una calmata coi giudizi.
Laforgia, Laforgia... aspetto ancora una risposta sul morphing dopo che 
mi hai accusato, perché ormai col fiato corto, di fare il troll :)
Dove ho scritto che sei stato sgarbato?
Ho scritto che hai usato il tuo solito tatto, ossia un tono e un 
atteggiamento poco amichevole e alquanto spocchioso (sì lo so è un NG e 
non un circolo di cucito e non siamo una grande famiglia e bla bla 
bla).
"Non esiste garbage collection in Delphi. Forse, prima di avventurarti
in applicazioni complesse, fai bene ad approfondire la conoscenza
dell'ambiente/linguaggio."
Sticazzi.

 dell'ambiente/linguaggio."
..non ha niente di spocchioso e poco amichevole. Fai analisi logica e
grammaticale e lo scoprirai. Si consiglia a qualcuno di approfondire la
conoscenza di un linguaggio, prima di avventurarsi nella scrittura di
applicazioni complesse.
