ich habe eine kleines Client/Server-Anwendung. Der Server ist auch soweit problemlos. Aber der Client baut Speicher auf. Es ist alles noch im Anfangsstadium des Projektes und die Kommunikation läuft immer gleich ab. Zu Testzwecken mit qDebug() habe ich eine kleine Testklasse angelegt:
TcpSocket.h
Code: Alles auswählen
#ifndef TCPSOCKET_H
#define TCPSOCKET_H
#include <QTcpSocket>
class TcpSocket : public QTcpSocket
{
Q_OBJECT
public:
explicit TcpSocket(const QString& n, QObject *parent = 0);
virtual ~TcpSocket();
private:
QString name;
};
#endif // TCPSOCKET_HCode: Alles auswählen
#include <QDebug>
#include "tcpsocket.h"
TcpSocket::TcpSocket(const QString& n, QObject *parent) :
QTcpSocket(parent),
name(n) {
}
TcpSocket::~TcpSocket() {
qDebug() << "Destructor: " << name;
}Nun habe ich eine Klasse die per moveToThread() einen eigenen Thread bekommt und die einen Slot hat der per Connect an das started()-Signal eines eigenen QThreads gekoppelt wird. Dort wird TcpSocket folgendermassen angelegt:
Code: Alles auswählen
void ConnectionTest::startWork() {
socket = new TcpSocket(name,this);
connect(socket, SIGNAL(connected()), this, SLOT(connected()));
socket->connectToHost("localhost",36001,QIODevice::ReadWrite);
}Code: Alles auswählen
void ConnectionTest::readSocket1009() {
disconnect(socket, SIGNAL(readyRead()), this, SLOT(readSocket1009()));
QByteArray txt(socket->readAll());
connect(socket, SIGNAL(disconnected()), this, SLOT(disconnected()));
socket->disconnectFromHost();
}Code: Alles auswählen
void ConnectionTest::disconnected() {
qDebug() << "Es soll gelöscht werden: " << name;
socket->deleteLater();
socket = NULL;
emit ended();
}Code: Alles auswählen
socket->deleteLater();Woran kann das liegen?Es soll gelöscht werden: "Test00000000001"
Es soll gelöscht werden: "Test00000000002"
Es soll gelöscht werden: "Test00000000003"
Destructor: "Test00000000003"
Es soll gelöscht werden: "Test00000000004"
Destructor: "Test00000000004"
Es soll gelöscht werden: "Test00000000005"
Destructor: "Test00000000005"
Es soll gelöscht werden: "Test00000000006"
Destructor: "Test00000000006"
Es soll gelöscht werden: "Test00000000007"
Destructor: "Test00000000007"
Es soll gelöscht werden: "Test00000000008"
Destructor: "Test00000000008"
Es soll gelöscht werden: "Test00000000009"
Destructor: "Test00000000009"
Es soll gelöscht werden: "Test00000000010"
Destructor: "Test00000000010"
Es soll gelöscht werden: "Test00000000011"
Destructor: "Test00000000011"
Es soll gelöscht werden: "Test00000000012"
Destructor: "Test00000000012"
Es soll gelöscht werden: "Test00000000013"
Destructor: "Test00000000013"
Es soll gelöscht werden: "Test00000000014"
Destructor: "Test00000000014"
Es soll gelöscht werden: "Test00000000015"
Es soll gelöscht werden: "Test00000000016"
Destructor: "Test00000000016"
Vielen Dank und Grüße,
Willi