Russian Qt Forum

Qt => Работа с сетью => Тема начата: blood_shadow от Апрель 27, 2011, 17:16



Название: Почтовый клиент
Отправлено: blood_shadow от Апрель 27, 2011, 17:16
Пишу почтовый клиент, часть что отвечает за посылку сообщений готова, осталось только
прием, нужно несколько советов:

отображаться все будет в таблице, по клику на строку должно открыться письмо,
вопрос - читать лучше сразу все письма с сервера или как-то по частям,
но так чтобы было незаметно для пользователя? если второе то как такое реализовать?


Название: Re: Почтовый клиент
Отправлено: SABROG от Апрель 27, 2011, 18:21
вопрос - читать лучше сразу все письма с сервера или как-то по частям,
но так чтобы было незаметно для пользователя? если второе то как такое реализовать?
Читай только заголовки (хотя это должно настраиваться). При клике пусть скачивается.


Название: Re: Почтовый клиент
Отправлено: Etud от Апрель 27, 2011, 19:17
но так чтобы было незаметно для пользователя?

А почему незаметно ? Это что, шпион ?

Мое мнение:
читать лучше сразу все письма с сервера.

Нет необходимости обращаться к нему еще. The Bat! посмотрите.


Название: Re: Почтовый клиент
Отправлено: CL0NE от Апрель 27, 2011, 23:21
Цитировать
читать лучше сразу все письма с сервера.
я зашел прочесть 1 письмо, а ожидаю загрузки всех


Название: Re: Почтовый клиент
Отправлено: blood_shadow от Апрель 27, 2011, 23:25
А почему незаметно ? Это что, шпион ?
я наверно не правильно выразился, не заметно в плане быстродействия


Название: Re: Почтовый клиент
Отправлено: blood_shadow от Апрель 27, 2011, 23:35
есть ф-ция которая вызывается в другом потоке(объект живет там), проблема в цикле
Код
C++ (Qt)
for (int i = 0; i < mailCount; ++i)
   {
       stream << QString("TOP %1 0\r\n").arg(QString::number(i + 1));
       stream.flush();
 
       // waiting for ready read
       if (!waitForReading())
           qDebug() << "Error";
 
       line = sslSocket.readLine();
 
       // waiting for ready read
       if (!waitForReading())
           qDebug() << "Error";
 
       mailContent = sslSocket.readAll();
       inboxMails->append(mailContent);
 
       if (stopped)
           return false;
 
   }
 
ф-ция waitForReading() реализована так:
Код
C++ (Qt)
inline bool Pop3Thread::waitForReading()
{
   int i = 0;
 
   while (i < 10)
   {
       if (sslSocket.waitForReadyRead(1000))
           return true;
       ++i;
 
       if (stopped)
           return false;
   }
 
   return false;
 
}
 
дело в том что код:
Код
C++ (Qt)
if (!waitForReading())
  qDebug() << "Error";
 
вызывает ошибку, но если заменить на:
Код
C++ (Qt)
if (!waitForReadyRead(10000))
  qDebug() << "Error";
 
то работает без проблем, в чем соль, почему ф-ции waitForReading() и waitForReadyRead(10000) различаются?