Russian Qt Forum
Июнь 04, 2024, 10:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Почтовый клиент  (Прочитано 6416 раз)
blood_shadow
Гость
« : Апрель 27, 2011, 17:16 »

Пишу почтовый клиент, часть что отвечает за посылку сообщений готова, осталось только
прием, нужно несколько советов:

отображаться все будет в таблице, по клику на строку должно открыться письмо,
вопрос - читать лучше сразу все письма с сервера или как-то по частям,
но так чтобы было незаметно для пользователя? если второе то как такое реализовать?
Записан
SABROG
Гость
« Ответ #1 : Апрель 27, 2011, 18:21 »

вопрос - читать лучше сразу все письма с сервера или как-то по частям,
но так чтобы было незаметно для пользователя? если второе то как такое реализовать?
Читай только заголовки (хотя это должно настраиваться). При клике пусть скачивается.
Записан
Etud
Гость
« Ответ #2 : Апрель 27, 2011, 19:17 »

но так чтобы было незаметно для пользователя?

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

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

Нет необходимости обращаться к нему еще. The Bat! посмотрите.
Записан
CL0NE
Гость
« Ответ #3 : Апрель 27, 2011, 23:21 »

Цитировать
читать лучше сразу все письма с сервера.
я зашел прочесть 1 письмо, а ожидаю загрузки всех
Записан
blood_shadow
Гость
« Ответ #4 : Апрель 27, 2011, 23:25 »

А почему незаметно ? Это что, шпион ?
я наверно не правильно выразился, не заметно в плане быстродействия
Записан
blood_shadow
Гость
« Ответ #5 : Апрель 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) различаются?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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