Qt - Многопоточный HTTP сервер

  Рет қаралды 10,085

Qt by Lev Alekseevskiy

Qt by Lev Alekseevskiy

12 жыл бұрын

Простейший многопоточный HTTP сервер на Qt

Пікірлер: 16
@n0tfr3shm1lk
@n0tfr3shm1lk 9 жыл бұрын
Не понимаю, почему у этих уроков так мало просмотров? Это же самые понятные и интересные видеоуроков.
@alexandrpetrov5570
@alexandrpetrov5570 5 жыл бұрын
Добрый день очень полезное видео.Хотелось бы увидеть подобные видео о написании сервера на qwebsocketserver .Также как с TCP. Однопоточного ,многопоточного и на пуле потоков. Или хотя бы многопоточного ,так как нигде нет подобных материалов
@mrognor3123
@mrognor3123 3 жыл бұрын
Спасибо!
@greatskydrake9531
@greatskydrake9531 3 жыл бұрын
у меня вот такая конструкция QSokcetThread::QSokcetThread(int socketDisctiptor, QObject *parent) : QThread(parent) , socketDescriptor(descriptor) вызывает синтаксическую ошибку
@QuantionRu
@QuantionRu 12 жыл бұрын
Отличные видео! Просьба выкладывать исходники и давать линк на них в описании видео.
@greatskydrake9531
@greatskydrake9531 3 жыл бұрын
Добрый день. Подскажите пожалуйста, как добиться многопоточности в графических приложениях ?
@greatskydrake9531
@greatskydrake9531 3 жыл бұрын
все получилось.
@igorm6585
@igorm6585 5 жыл бұрын
Я так и не понял почему в программе использовали параметр Qt::DirectConnection для функции connect : connect(socket, SIGNAL(readyRead()), this, SLOT(onReadyRead()) , Qt::DirectConnection) Объект QSocketThread (this) находится в основном потоке, а объект типа QTcpSocket (socket) находится уже в совершенно другом потоке (он создается в функции run и его будет обслуживать поток, который позже запускается функцией exec()). И эти потоки могут вообще выполняться одновременно, поэтому напрямую посылать сообщения вроде как и не корректно. Т. е. в поток где socket получает сигнал, а на обработку передается в слот класса QSocketThread, экземпляр которого находится в другом потоке. Но используется Qt::DirectConnection, поэтому оно выполняется сразу же из потока socket. А поскольку экземпляр класса QSocketThread ничего не делает и сам не вызывает свои слоты, то вроде как конфликтов нет. IMHO надо было бы определить класс-потомок от QTcpSocket и в нем определить слоты onReadyRead() и onDisconnected() и связывать свои сигналы со своими же слотами. P.S. IMHO конечно же. Я мог чего-то и не понять.
@plgrm44
@plgrm44 2 жыл бұрын
Потому что неверно считать, что если функция run выполняется в другом потоке, то и объект класса, который там создали, будет принадлежать другому потоку) Чтобы это было так нужно вызвать moveToThread().
@igorm6585
@igorm6585 2 жыл бұрын
@@plgrm44 Объект, у которого не указан родитель, поступает во владение потока, который этот объект создал. Читал на Хабре умную статью "Правильная работа с потоками в Qt", оттуда и почерпнул информацию. Видимо, под впечатлением этой статьи я и написал 3 года назад свой комментарий :-) А сейчас уже и не помню что к чему и о чем был мой комментарий :-)
@JackTaylorCSGO
@JackTaylorCSGO 8 жыл бұрын
кто подскажет как в win 8.1 в диспетчере задач показать столбец с потоками? все перерыл не нашел
@ginbulat
@ginbulat 5 жыл бұрын
Во вкладке "Подробности" на любом заголовке любого столбца ПКМ -> "Выбрать столбцы"
@vitalyrumeantsev2133
@vitalyrumeantsev2133 7 жыл бұрын
Очень нравятся ваши уроки. Но постоянно какие-то проблемы. В этом уроке проблема следующая.Прошу помочь, если кто может: Предыдущий вариант однопоточного собрался и работает. На основе его как и положено, создаю проект этого урока. Класс создаю так class QSocketThread : public QThread { // Q_OBJECT private: int SocketDescriptor; QTcpSocket *socket; public: QSocketThread(int descriptor); ~QSocketThread(); void run(); public slots: void onReadyRead(); void onDisconnected(); }; Далее создаю экземпляр класса void QSimpleServer::incomingConnection(int handle) { QSocketThread * sthread = new QSocketThread(handle); connect(sthread,SIGNAL(finished()),sthread,SLOT(deleteLater())); sthread->start(); } в run(): void QSocketThread::run() { socket = new QTcpSocket(); socket->setSocketDescriptor(SocketDescriptor); connect(socket,SIGNAL(readyRead()),this,SLOT(onReadyRead()),Qt::DirectConnection); connect(socket,SIGNAL(disconnected()),this,SLOT(onDisconnected()),Qt::DirectConnection); exec(); } Проект собирается и запускается, но когда происходит обращение к порту 80 ругается No such slot QThread::onReadyRead().... и No such slot QThread::onDisconnected().... Никак не пойму отчего он ищет слоты не в QSocketThread , а в QThread . Пожалуйста объясните мне идиоту, где я накосячил.
@vitalyrumeantsev2133
@vitalyrumeantsev2133 7 жыл бұрын
Переиграл коннекты сигналов со слотами с: connect(socket,SIGNAL(readyRead()),this,SLOT(onReadyRead()),Qt::DirectConnection); connect(socket,SIGNAL(disconnected()),this,SLOT(onDisconnected()),Qt::DirectConnection); на: connect(socket,&QTcpSocket::readyRead,this,QSocketThread::onReadyRead, Qt::DirectConnection); connect(socket,&QTcpSocket::disconnected,this,QSocketThread::onDisconnected, Qt::DirectConnection); И что интересно, заработало.
@deniszdorovtsov8195
@deniszdorovtsov8195 11 жыл бұрын
выкладывайте исходники. лень.
@n0tfr3shm1lk
@n0tfr3shm1lk 11 жыл бұрын
не нужно выкладывать исходники! уроки простейшие! и если их не повторить самому, то в голове ничего не отложится!!!
Qt - Многопоточный HTTP сервер (через QThreadPool)
13:59
Лев Алексеевский
Рет қаралды 9 М.
Qt - Настройки приложения (QSettings)
19:38
Лев Алексеевский
Рет қаралды 9 М.
Heartwarming moment as priest rescues ceremony with kindness #shorts
00:33
Fabiosa Best Lifehacks
Рет қаралды 35 МЛН
Clown takes blame for missing candy 🍬🤣 #shorts
00:49
Yoeslan
Рет қаралды 25 МЛН
Qt - Использование таймеров в Qt
10:36
Лев Алексеевский
Рет қаралды 15 М.
Чего ожидать от HTTP/3 + Go
51:07
Нина Пакшина
Рет қаралды 3 М.
Qt - Сервер веб-приложения (QtWebApp, часть 1)
21:09
Лев Алексеевский
Рет қаралды 9 М.
Как NAT спас интернет?
11:42
Merion Academy
Рет қаралды 59 М.
Qt - Использование скриптов в приложениях
19:37
Лев Алексеевский
Рет қаралды 5 М.