Russian Qt Forum
Ноябрь 22, 2024, 20:23
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Работа с сетью
>
[Qt 3.3.x] Многопоточный сервер на основе QServerSocket
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: [Qt 3.3.x] Многопоточный сервер на основе QServerSocket (Прочитано 5350 раз)
Steven_Orko
Гость
[Qt 3.3.x] Многопоточный сервер на основе QServerSocket
«
:
Апрель 13, 2007, 10:58 »
По ТЗ необходимо реализовать многопоточный сетевой сервер по протоколу TCP. Суть сервера заключается в следующем. Имеется некая структура данных, содержимое которой могут запрашиваться и изменяться только на основе сетевых запросов. Если бы это были данные, которые напрямую изменялись в соответсвие с сетевым запросом, то проблемы не было бы. Но дело в том, что после некоторого сетевого запроса сервер выполняет действие, в результате которого может быть сгенерирован сигнал и вызван, соответственно, слот. Проблемма в том, что мютексы ни как не помогают. На вызове слота, или на генерировании сигнала программа падает в кору.
Как я понял, сигнал генерируется в callback функции в основном потоке. Если я прав, то в чем может быть проблема? Поделитесь опытом, кто уже реализовывал подобную штуку. При необходимости могу поделиться кодом, но он занимает без малого 2000 строк...
добавлено спустя 1 час 32 минуты:
Почитал Assistant повнимательнее. Оказывается, что класс объект класса QSocket нельзя использовать в потоках. Для использования в потоках необходимо использовать объект класса QSocketDevice.
Записан
Sergeich
Гость
[Qt 3.3.x] Многопоточный сервер на основе QServerSocket
«
Ответ #1 :
Апрель 13, 2007, 11:11 »
А какая модель сервера? Нитка на запрос или нитка на соединение?
Цитировать
Оказывается, что класс объект класса QSocket нельзя использовать в потоках.
В 3-ке в нитках почти ниче кутевого нельзя юзать
Записан
Hordi
Гость
[Qt 3.3.x] Многопоточный сервер на основе QServerSocket
«
Ответ #2 :
Апрель 13, 2007, 11:50 »
2 Sergeich:
>В 3-ке в нитках почти ниче кутевого нельзя юзать
Можно, только не напрямую, а через отправку сообщений.
Записан
Steven_Orko
Гость
[Qt 3.3.x] Многопоточный сервер на основе QServerSocket
«
Ответ #3 :
Апрель 13, 2007, 20:49 »
На самом деле можно. )))) Я даже базовый класс для многопоточного сервера TCP написал. Там используется не QSocket, а QSocketDevice. Все оказалось достаточно просто. Код не кроссплатформенный, но мне оно и не надо. ))) Если надо, выложу в понедельник, как его оттесту и проверю на кроликах. )))
2 Sergeich:
В принципе, ты прав )))) Но того, что можно, вполне хватает при правильной компоновке )))
2 Hordi:
Можно и без нее, используя специальный алгоритм блокировки )))
В общем, в итоге у меня получилось нечто, напоминающее QThread Qt series 4. ))))
Записан
Hordi
Гость
[Qt 3.3.x] Многопоточный сервер на основе QServerSocket
«
Ответ #4 :
Апрель 16, 2007, 11:09 »
Дело в том, что с сообщениями не нужно заморачиваться с блокировками вообще... Отправил и забыл.
добавлено спустя 53 секунды:
Я раньше также блокировки юзал, но затем все переделал на сообщения, имхо проще.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...