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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTcpSocket скорость приема данных.  (Прочитано 3553 раз)
Harlon
Гость
« : Июнь 16, 2018, 18:14 »

И вот снова я. Контроллер разогнали до 1800 массивов по 8кб в секунду, но встал вопрос с приемом данных на скорости 800-1000 массивов в секунду, затыкается передача данных, буквально сразу, может 1000 массивов примет и всё. Отрисовку я убрал, работает только счетчик полученных массивов.

Вот код приема:
Код
C++ (Qt)
void MainWindow::sockASCANRead()
{
   for (;;)
   {
       const auto bav = socket->bytesAvailable();
       if (bav < 8192) return;
       ASCANData = socket->read(8192); // &#1090;&#1091;&#1090; &#1074; QByteArray &#1095;&#1080;&#1090;&#1072;&#1077;&#1090; &#1080;&#1079; &#1089;&#1086;&#1082;&#1077;&#1090;&#1072;
 
       emit paintChar(ASCANData); // &#1089;&#1080;&#1075;&#1085;&#1072;&#1083; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1102;&#1097;&#1080;&#1081; QByteArray &#1082;&#1083;&#1080;&#1077;&#1085;&#1090;&#1091;
   }
}
 

Так же я думаю, как советовал мне vic57, разметить отправляемые данные, т.е. сначала я набиваю буфер на "железке" следующим образом.

Код
C
long next_block = 0xaaaaaaab;
...
err = tcp_write(tpcb, &next_block, sizeof(long), 1); //&#1079;&#1072;&#1087;&#1080;&#1089;&#1072;&#1083; &#1084;&#1072;&#1088;&#1082;&#1077;&#1088; &#1085;&#1072;&#1095;&#1072;&#1083;&#1072; &#1073;&#1083;&#1086;&#1082;&#1072;
err = tcp_write(tpcb, n, 2048 * sizeof(int), 1); //&#1079;&#1072;&#1087;&#1080;&#1089;&#1072;&#1083; &#1084;&#1072;&#1089;&#1089;&#1080;&#1074;
err = tcp_output(tpcb); //&#1086;&#1090;&#1087;&#1088;&#1072;&#1074;&#1080;&#1083; &#1074;&#1089;&#1105; &#1082;&#1083;&#1080;&#1077;&#1085;&#1090;&#1091;
 

А на клиенте разбирать, это. Хотя я не понимаю, почему, тот вариант приема данных, который использую я вешается... Подскажите, как мне быть, вроде не такой уж и большой поток данных, а клиент виснет?
Записан
RedDog
Частый гость
***
Offline Offline

Сообщений: 221


Просмотр профиля
« Ответ #1 : Июнь 16, 2018, 22:32 »

Почему нельзя в потоке сокета делать readAll и отдавать "наверх" для разбора на нужные куски?
Смысл for-а какой здесь?
Записан
vic57
Чайник
*
Offline Offline

Сообщений: 90


Просмотр профиля
« Ответ #2 : Июнь 17, 2018, 01:37 »

Почему нельзя в потоке сокета делать readAll и отдавать "наверх" для разбора на нужные куски?
Смысл for-а какой здесь?
+1 ТС уже говорили неоднократно
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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