crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в количество переданных данных
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
kuzulis Дата 27.1.2014, 10:43
  ИМХО, никак. Не юзать Qt-шные сокеты.

Или перевести открытый сокет из неблокирующего режима в блокирующий (через setSockOptions(), или через платформо-зависимые ioctl()). И тогда придется этот сокет использовать в отдельном потоке потому что write() будет блокирующим. Тогда bytesWritten() будет корректно излучаться.. Как то так.. В теории. :)
call_me_Frank Дата 27.1.2014, 5:06
  окей, ясно...но поскольку интерес направлен именно в сторону количества переданных данных по сети, а не в буффер, то не могу не спросить насчет костылей - какие есть варианты получить достоверные и своевременные данные?
kuzulis Дата 26.1.2014, 21:03
  Законнектиться к сигналу QIODevice::bytesWritten(qint64).

Но если быть точным, то эта штука работает в Qt-шных сокетах некорректно, ИМХО (а может оно так и планиорвалось..).
Суть в том, что bytesWritten() излучается после успешного write(). Но это неправильно, т.к. сокеты в Qt неблокирующие, поэтому вызов write() гарантирует только факт передачи массива данных из юзер-спейса в ядро (FIFO драйвера). Таким образом реально данные могут быть еще не переданы (например, когда их очень много), но bytesWritten() уже излучится.

Поэтому - никак без костылей, ИМХО.
call_me_Frank Дата 26.1.2014, 14:09
  Как получать количество переданных сокетом байт по мере отправки? пробовал разные примеры - нужного результата не получил
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 17.6.2024, 3:52