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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTcpSocket connectToHost утечка памяти  (Прочитано 9146 раз)
arial
Гость
« : Август 12, 2009, 10:30 »

В QTcpSocket при каждом connectToHost течёт память.

Нашёл описание проблемы здесь, но как исправить - не знаю.

Тестовый пример прилагаю.
Записан
Winstrol
Гость
« Ответ #1 : Август 12, 2009, 11:18 »

В QTcpSocket при каждом connectToHost течёт память.

Нашёл описание проблемы здесь, но как исправить - не знаю.
Тестовый пример прилагаю.
Сделай слот с основной работой, который будет вызываться в цикле обработки сообщений, а не до вызова a.exec()
Код
C++ (Qt)
   QTimer::singleShot(0, &testClass, SLOT(startTest()));
   a.exec();
 
Записан
arial
Гость
« Ответ #2 : Август 12, 2009, 13:14 »

Дык у меня так и сделано.
Код:
void TestClass::Tick()
{
    Connect();
    QTimer::singleShot(1000, this, SLOT(Tick()));
}
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Август 12, 2009, 17:04 »

Какая у тебя версия Qt? Судя по статусу проблемы она уже и исправлена в Qt начиная с 4.2.0.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
arial
Гость
« Ответ #4 : Август 12, 2009, 18:29 »

У меня 4.5.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Август 12, 2009, 20:15 »

Отправляй повторный репорт, с ссылкой на старый и примечанием "регресс". (Если ты конечно уверен что это баг)
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
arial
Гость
« Ответ #6 : Август 12, 2009, 21:18 »

Я, собственно, и выложил небольшой исходничек, чтобы ещё кто-нибудь проверил. Может это я что накосячил, а не баг вовсе.
Записан
Winstrol
Гость
« Ответ #7 : Август 12, 2009, 21:31 »

Я, собственно, и выложил небольшой исходничек, чтобы ещё кто-нибудь проверил. Может это я что накосячил, а не баг вовсе.
На 4.5 под XP тоже утекает память вместе с хендлами.
Записан
arial
Гость
« Ответ #8 : Август 21, 2009, 12:05 »

Огромная просьба, у кого нормально с английским - зарепортите, пожалуйста, этот баг, а то я и двух слов по английски связать не могу.
Записан
ритт
Гость
« Ответ #9 : Август 21, 2009, 14:45 »

слегка изменил тест и что-то у меня ничего не утекает - ни память, ни хэндлы

Код
C++ (Qt)
void TestClass::Connect()
{
   QTcpSocket *socket = new QTcpSocket();
 
   socket->connectToHost(HostAddress, 80, QTcpSocket::ReadOnly);
 
   if (!socket->waitForConnected(1000) ||
       socket->state() != QTcpSocket::ConnectedState ||
       !socket->isValid()) {
       qDebug() << "Connection error";
delete socket;
       return;
   }
   qDebug() << QString("Connected to %1").arg(HostAddress);
 
 
   socket->disconnectFromHost();
 
   if (socket->state() != QAbstractSocket::UnconnectedState &&
       !socket->waitForDisconnected(1000)) {
       socket->abort();
       qDebug() << "Disonnection aborted";
delete socket;
       return;
   }
   qDebug() << QString("Disconnected from %1").arg(HostAddress);
 
   delete socket;
}
 
Записан
Winstrol
Гость
« Ответ #10 : Август 21, 2009, 15:37 »

слегка изменил тест и что-то у меня ничего не утекает - ни память, ни хэндлы
Qt 4.5.2 Win XP. Течет и память и хенлы. Возможно как-то связано реализацией ассинхронности через HWND.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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