Russian Qt Forum

Qt => Работа с сетью => Тема начата: Harlon от Июнь 16, 2018, 18:14



Название: QTcpSocket скорость приема данных.
Отправлено: 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;
 

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


Название: Re: QTcpSocket скорость приема данных.
Отправлено: RedDog от Июнь 16, 2018, 22:32
Почему нельзя в потоке сокета делать readAll и отдавать "наверх" для разбора на нужные куски?
Смысл for-а какой здесь?


Название: Re: QTcpSocket скорость приема данных.
Отправлено: vic57 от Июнь 17, 2018, 01:37
Почему нельзя в потоке сокета делать readAll и отдавать "наверх" для разбора на нужные куски?
Смысл for-а какой здесь?
+1 ТС уже говорили неоднократно