QT4:Signal Slots ueber Threads. Pointer uebertragen/loeschen
QT4:Signal Slots ueber Threads. Pointer uebertragen/loeschen
Hi,
ich habe eine server anwendung, die fuer jede client verbindung einen client-thread erzeugt.
die kommunikation zwischen dem hauptthread und den einzelnen client threads mache ich asychron ueber den signal/slot mechanismus.
immer wenn der server daten hat, die er an die client-threads verteilen soll, erzeugt er ein objekt InternalEvents auf dem heap und emitiert einen pointer auf das neu erzeugte InternalEvent an die client threads. das klappt auch super...
jetzt die frage...
wann / bzw. an welcher stelle muss / darf ich diese auf dem heap erzeugten InternalEvents objekte loeschen ?
nach dem verteilen ja nicht oder? da haben ja die threads noch pointer drauf.....
gruss,
nando
ich habe eine server anwendung, die fuer jede client verbindung einen client-thread erzeugt.
die kommunikation zwischen dem hauptthread und den einzelnen client threads mache ich asychron ueber den signal/slot mechanismus.
immer wenn der server daten hat, die er an die client-threads verteilen soll, erzeugt er ein objekt InternalEvents auf dem heap und emitiert einen pointer auf das neu erzeugte InternalEvent an die client threads. das klappt auch super...
jetzt die frage...
wann / bzw. an welcher stelle muss / darf ich diese auf dem heap erzeugten InternalEvents objekte loeschen ?
nach dem verteilen ja nicht oder? da haben ja die threads noch pointer drauf.....
gruss,
nando
Aus: postEvent
The event must be allocated on the heap since the post event queue will take ownership of the event and delete it once it has been posted. It is not safe to modify or delete the event after it has been posted.
Dann ist was anderes faul.Nur werden die Objekte scheinbar nicht geloescht
Normal ist das ja der clou. du erzeugst das event (dringend mit new) deine application verteilt es und loescht es wenn es fertig ist. Und nur die App weiss ja, wenn es mit dem verteilen fertig ist. Woelltest du selbst loeschen, wuesstest du doch gar ned wann, bzw. muesstest dich tief in die Application einklinken.
Also wahrscheinlich kommen deine leaks von was anderem.
Ciao ...
Ich mache es mit signals/slots.... aber die arbeiten doch intern auch mit events...also postEvent etc. .... dachte ich zumindest ....upsala hat geschrieben:Wenn du dich entschieden hast, ob du Signal/Slots verwendest oder Events dann könne wir dir vielleicht besser helfen. Mein Argument war auf Events bezogen.
Wenn du einen Pointer per Signal/Slot überträgst wird dieser nicht von Qt gelöscht. Warum sollten sie soetwas tun? Und ich würde bei asynchronen Verbindungen den Pointer auch nicht gleich nach einem emit vom Sender löschen lassen.
Bei postEvent werden die QEvents(!) von Qt gelöscht wenn das Event an alle Empfänger verteilt worden ist.
Bei postEvent werden die QEvents(!) von Qt gelöscht wenn das Event an alle Empfänger verteilt worden ist.
...genau das ist/war ja mein problem.... wann soll/darf ich diesen pointer loeschen... ????upsala hat geschrieben:Und ich würde bei asynchronen Verbindungen den Pointer auch nicht gleich nach einem emit vom Sender löschen lassen.
ich habe ganz viele client objekte, die diesen pointer uber den slot bekommen und damit was machen.......
deswegen darf ich ja nach dem emit nicht gleich delete aufrufen und sozusagen den client objekten ihr uebergebenes objekt unter den fuessen wegloeschen....
gruss,
nando