Russian Qt Forum
Ноябрь 23, 2024, 00:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Нубский вопрос по QTcpSocket[решено]  (Прочитано 4708 раз)
BuRn
Гость
« : Ноябрь 13, 2014, 23:43 »

Здравствуйте. Возникла проблема с сокетами, а именно проблема при их уничтожении. Вопрос в следующем, следует ли вызывать на прямую delete socket,
Код:
QTcpSocket *_sock = new QTcpSocket(this);
        _sockets[_data] = _sock;
        qDebug()<<_sockets.size();
        connect(_sock,SIGNAL(readyRead()),this,SLOT(onReadyRead()));
        connect(_sock,SIGNAL(connected()),this,SLOT(onSockedSend()));
        connect(_sock,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(onHandlerError(QAbstractSocket::SocketError)));
        connect(_sock, SIGNAL(disconnected()),_sock,SLOT(deleteLater()));
Инициализация прошла, дальше я в слоте onReadyRead читаю данные и пытаюсь сделать delete от сокета который прислал сигнал, далее получаю пичальную ситуацию, следует ли удалять сокет с расчетом на то что навешан deleteLater()?
« Последнее редактирование: Ноябрь 14, 2014, 00:38 от BuRn » Записан
torwig
Самовар
**
Offline Offline

Сообщений: 134



Просмотр профиля
« Ответ #1 : Ноябрь 14, 2014, 00:20 »

Он удалится при дисконнекте, поэтому явно писать delete не надо, можешь просто disconnectFromHost() вызвать, если он тебе не нужен или он сам удалится, когда произойдет дисконнект.
Записан
BuRn
Гость
« Ответ #2 : Ноябрь 14, 2014, 00:21 »

Он удалится при дисконнекте, поэтому явно писать delete не надо, можешь просто disconnectFromHost() вызвать, если он тебе не нужен или он сам удалится, когда произойдет дисконнект.
Я ему после получения ответа и чтения данных делаю close() , этого достаточно получается ?
Записан
torwig
Самовар
**
Offline Offline

Сообщений: 134



Просмотр профиля
« Ответ #3 : Ноябрь 14, 2014, 00:26 »

To close the socket, call disconnectFromHost(). QAbstractSocket enters QAbstractSocket::ClosingState. After all pending data has been written to the socket, QAbstractSocket actually closes the socket, enters QAbstractSocket::ClosedState, and emits disconnected().
По сути close() нечто подобное сделает, но я всегда вызывал именно disconnectFromHost().
void QAbstractSocket::close () [virtual]
Reimplemented from QIODevice::close().
Closes the I/O device for the socket, disconnects the socket's connection with the host, closes the socket, and resets the name, address, port number and underlying socket descriptor.
Записан
BuRn
Гость
« Ответ #4 : Ноябрь 14, 2014, 00:37 »

To close the socket, call disconnectFromHost(). QAbstractSocket enters QAbstractSocket::ClosingState. After all pending data has been written to the socket, QAbstractSocket actually closes the socket, enters QAbstractSocket::ClosedState, and emits disconnected().
По сути close() нечто подобное сделает, но я всегда вызывал именно disconnectFromHost().
void QAbstractSocket::close () [virtual]
Reimplemented from QIODevice::close().
Closes the I/O device for the socket, disconnects the socket's connection with the host, closes the socket, and resets the name, address, port number and underlying socket descriptor.
Спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.104 секунд. Запросов: 22.