Russian Qt Forum

Qt => Общие вопросы => Тема начата: qtkoder777 от Апрель 21, 2016, 00:47



Название: Многопоточный сервер на Qt - передача сокетов между потоками
Отправлено: qtkoder777 от Апрель 21, 2016, 00:47
Здравствуйте.
Возникла задача написать такой сервер:
Сервер должен получить данные от клиентов, провести над ними некоторые вычисления и вернуть результат клиенту.
В процессе вычислений могут поступать новые запросы.

Пытаюсь сделать так:
Ввёл структуру, в которой запоминаю сокет клиента, которому надо отослать результат работы с data_.
Код
C++ (Qt)
struct ThreadData
{
     Data data_;
     QTcpSocket* socket_;
};
и очередь QQueue этих структур, которая заполняется в основном потоке

Вычисления крутятся в отдельном потоке наследнике QThread.
Данные извлекаются из очереди, обрабатываются, и отправляются клиенту с помощью
Код
C++ (Qt)
socket_->write()
, если очередь пуста, крутится бесконечный цикл.

Фактически, из потока вычислений данные НЕ ДОХОДЯТ до клиента, хотя write завершается без ошибки.
В основном потоке данные по тому же сокету отправляются и доходят.

Читал где то на другом форуме, что сокеты нельзя передавать между потоками.
Так ли это? И как надо поступать?


Название: Re: Многопоточный сервер на Qt - передача сокетов между потоками
Отправлено: VozaMFC от Апрель 26, 2016, 15:29
 В доках кьюти есть очень неплохие примеры по сокетам и потокам. А главное вам нужно разобраться с работой потока что бы потом реализовать задуманное на стороне сервера.