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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: waitForBytesWritten непонятна логика работы  (Прочитано 5070 раз)
RedDog
Гость
« : Ноябрь 14, 2011, 09:24 »

Отправляю с сервера на клиента поток данных (из файла)

Код:
qint64 bufSize = 128*1024;
int timeout = 10;
CLogger logger();
QFile file("somefile.bin");
file.open(QIODevice::ReadOnly);
while(!file.atEnd())
    {
        if (needChangeSpeed) // если необходимо изменить скорость
        {
            delayValue = timeout; // изменение таймаута
            bufSize = transferSpeedBuf; // изменение размера пакета
            needChangeSpeed = false;
        }
        outBuf.clear();
        out.device()->seek(0);
        QByteArray fileData = file.read(number);
        if (socket->state() == QAbstractSocket::ConnectedState)
            socket->write(fileData);
        else
        {
            emit disconnectedFromClient(m_IPAdress);
            return;
        }
        bool write = socket->waitForBytesWritten();
        logger.writeValue(write); // запись в лог
        msleep(delayValue)
        QCoreApplication::processEvents();
}

Если размер пакета относительно большой (>= 10 Кб), и таймаут маленький (<=50 мс) тогда waitForBytesWritten возвращает true.
Ежели размер пакета маленький и таймаут большой, тогда waitForBytesWritten возвращает false, но даже в этом случае 3 дефолтных секунды не ждет, а сразу возвращает.
Что это такое и почему так происходит? Как узать что байты дошли нормально?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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