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

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

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: QTcpSocket и QThread  (Прочитано 22600 раз)
Harlon
Гость
« Ответ #30 : Июнь 09, 2018, 11:06 »

Этот код я так понимаю только под линуксом работает?
Записан
vic57
Чайник
*
Offline Offline

Сообщений: 90


Просмотр профиля
« Ответ #31 : Июнь 09, 2018, 12:07 »

ну да, под винду надо WinSock подключать
https://studfiles.net/preview/1551127/page:2/
« Последнее редактирование: Июнь 09, 2018, 12:09 от vic57 » Записан
Harlon
Гость
« Ответ #32 : Июнь 09, 2018, 15:09 »

А в QT так сделать не получится?

Мне просто надо сейчас из моего приложения отправлять минимум 600 запросов, железку допишут люди знающие, что делают, главное, что бы клиент выжимал, как можно больше... Я щас пробую сделать несколько потоков для отправки, но это мне во-первых не очень удается, а во-вторых я не уверен, что я правильный подход использую.
« Последнее редактирование: Июнь 09, 2018, 20:24 от Harlon » Записан
vic57
Чайник
*
Offline Offline

Сообщений: 90


Просмотр профиля
« Ответ #33 : Июнь 09, 2018, 21:21 »

потоки не помогут - проволока одна
как вариант создать отдельный тред, который будет заниматься только запросом - ответом и писать в общий буфер, а в основном треде из буфера читать и рисовать. тут можно поделить задачу по ядрам процессора. типа так
http://www.bogotobogo.com/Qt/Qt5_QTcpServer_QThreadPool_Multithreaded_Client_Server.php
или как в network/Loopback Example  
« Последнее редактирование: Июнь 09, 2018, 21:58 от vic57 » Записан
Harlon
Гость
« Ответ #34 : Июнь 10, 2018, 12:04 »

Код
C++ (Qt)
ui->startBtn->setEnabled(false);
   ui->stopBtn->setEnabled(true);
 
   while (!ui->startBtn->isEnabled()) {
 
       for(int i = 0; i < 10; i++)
       {
           socket->write("A");
           QTest::qWait(2);
 
       }
       QApplication::processEvents();
 

А вот такая штука сработает?
Записан
vic57
Чайник
*
Offline Offline

Сообщений: 90


Просмотр профиля
« Ответ #35 : Июнь 10, 2018, 14:19 »

а звчем это? в Loopback Example у меня на локалхосте скорость 200 МВ/с, если с внешним сервером не поднимается - канал передачи данных тормозит
Записан
Harlon
Гость
« Ответ #36 : Июнь 10, 2018, 15:35 »

Попробую адаптировать, чет у меня от этого примера глаза разбегаются, они бы хоть комментировали его...  Смеющийся

Посмотрел, попробовал, но только не понял, как это решает мою проблему отправки моих запросов со скоростью 1 раз в 1 - 1.6 мс., Да передает он тут 50 мегабайт, а фишка-то в чем. Походу я опять не догоняю, что-то...

Решил попробовать qWait из QTest:

Код
C++ (Qt)
ui->startBtn->setEnabled(false);
ui->stopBtn->setEnabled(true);
while (!ui->startBtn->isEnabled())
{
   socket->write("A");
   QTest::qWait(1);
}
 

Всем спасибо за то, что меня терпели, как и сказал vic57 из-за прерываний у меня не получится с такой скоростью опрашивать железку. И тут недавно я узнал, что такое кольцевой буфер и моя проблема почти улетучилась(просто пока я разбираюсь, как это будет работать у меня). В общем всем ОГРОМНОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО.
« Последнее редактирование: Июнь 13, 2018, 09:11 от Harlon » Записан
vic57
Чайник
*
Offline Offline

Сообщений: 90


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

интересно что  получилось с буфером, что-то я не знаю такой вариант  Непонимающий
Записан
Harlon
Гость
« Ответ #38 : Июнь 14, 2018, 08:02 »

А сейчас расскажу, чем вообще дело кончилось. И кольцевой буфер не понадобился, хотя для камеры и потока видео его желательно бы иметь, но у меня другая задача была. В общем мне помог добрый человек увеличить snd_buffer у LWIP до 64КБ и тут, как понеслось я переписал реализацию в отдельную функцию отправки, т.е. я сейчас посылаю один запрос и врубается поток, да такой дикий, что у меня софтина верхняя виснет. Далее мы дэлэем подкрутили скорость опроса до нужных нам 600 массивов/с. Программа на ура пережевала это всё. Далее до 800, тоже вроде нормально. Но из-за отрисовки бывало верхняя прога висла, на ней надо было сделать "Disconnect", потом опять подключиться и она продолжала работать.(Фиг знает почему она так виснет, я думаю надо всё таки как-то рисовалку в поток другой выслать). Ну я вырубил отрисовку и оп ля 1кГц, 1000 массивов в секунду, жуются. Сейчас думаю над верхним софтом, моим, как бы его разгрузить...
Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


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