Название: [Qt 3.3.x] Многопоточный сервер на основе QServerSocket Отправлено: Steven_Orko от Апрель 13, 2007, 10:58 По ТЗ необходимо реализовать многопоточный сетевой сервер по протоколу TCP. Суть сервера заключается в следующем. Имеется некая структура данных, содержимое которой могут запрашиваться и изменяться только на основе сетевых запросов. Если бы это были данные, которые напрямую изменялись в соответсвие с сетевым запросом, то проблемы не было бы. Но дело в том, что после некоторого сетевого запроса сервер выполняет действие, в результате которого может быть сгенерирован сигнал и вызван, соответственно, слот. Проблемма в том, что мютексы ни как не помогают. На вызове слота, или на генерировании сигнала программа падает в кору.
Как я понял, сигнал генерируется в callback функции в основном потоке. Если я прав, то в чем может быть проблема? Поделитесь опытом, кто уже реализовывал подобную штуку. При необходимости могу поделиться кодом, но он занимает без малого 2000 строк... добавлено спустя 1 час 32 минуты: Почитал Assistant повнимательнее. Оказывается, что класс объект класса QSocket нельзя использовать в потоках. Для использования в потоках необходимо использовать объект класса QSocketDevice. Название: [Qt 3.3.x] Многопоточный сервер на основе QServerSocket Отправлено: Sergeich от Апрель 13, 2007, 11:11 А какая модель сервера? Нитка на запрос или нитка на соединение?
Цитировать Оказывается, что класс объект класса QSocket нельзя использовать в потоках. В 3-ке в нитках почти ниче кутевого нельзя юзать :(Название: [Qt 3.3.x] Многопоточный сервер на основе QServerSocket Отправлено: Hordi от Апрель 13, 2007, 11:50 2 Sergeich:
>В 3-ке в нитках почти ниче кутевого нельзя юзать Можно, только не напрямую, а через отправку сообщений. Название: [Qt 3.3.x] Многопоточный сервер на основе QServerSocket Отправлено: Steven_Orko от Апрель 13, 2007, 20:49 На самом деле можно. )))) Я даже базовый класс для многопоточного сервера TCP написал. Там используется не QSocket, а QSocketDevice. Все оказалось достаточно просто. Код не кроссплатформенный, но мне оно и не надо. ))) Если надо, выложу в понедельник, как его оттесту и проверю на кроликах. )))
2 Sergeich: В принципе, ты прав )))) Но того, что можно, вполне хватает при правильной компоновке ))) 2 Hordi: Можно и без нее, используя специальный алгоритм блокировки ))) В общем, в итоге у меня получилось нечто, напоминающее QThread Qt series 4. )))) Название: [Qt 3.3.x] Многопоточный сервер на основе QServerSocket Отправлено: Hordi от Апрель 16, 2007, 11:09 Дело в том, что с сообщениями не нужно заморачиваться с блокировками вообще... Отправил и забыл.
добавлено спустя 53 секунды: Я раньше также блокировки юзал, но затем все переделал на сообщения, имхо проще. |