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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Qt 3.3.x] Многопоточный сервер на основе QServerSocket  (Прочитано 5346 раз)
Steven_Orko
Гость
« : Апрель 13, 2007, 10:58 »

По ТЗ необходимо реализовать многопоточный сетевой сервер  по протоколу TCP. Суть сервера заключается в следующем. Имеется некая структура данных, содержимое которой могут запрашиваться и изменяться только на основе сетевых запросов. Если бы это были данные, которые напрямую изменялись в соответсвие с сетевым запросом, то проблемы не было бы. Но дело в том, что после некоторого сетевого запроса сервер выполняет действие, в результате которого может быть сгенерирован сигнал и вызван, соответственно, слот. Проблемма в том, что мютексы ни как не помогают. На вызове слота, или на генерировании сигнала программа падает в кору.
Как я понял, сигнал генерируется в callback функции в основном потоке. Если я прав, то в чем может быть проблема? Поделитесь опытом, кто уже реализовывал подобную штуку. При необходимости могу поделиться кодом, но он занимает без малого 2000 строк...

добавлено спустя 1 час 32 минуты:

 Почитал Assistant повнимательнее. Оказывается, что класс объект класса QSocket нельзя использовать в потоках. Для использования в потоках необходимо использовать объект класса QSocketDevice.
Записан
Sergeich
Гость
« Ответ #1 : Апрель 13, 2007, 11:11 »

А какая модель сервера? Нитка на запрос или нитка на соединение?
Цитировать
Оказывается, что класс объект класса QSocket нельзя использовать в потоках.
В 3-ке в нитках почти ниче кутевого нельзя юзать Грустный
Записан
Hordi
Гость
« Ответ #2 : Апрель 13, 2007, 11:50 »

2 Sergeich:
>В 3-ке в нитках почти ниче кутевого нельзя юзать

Можно, только не напрямую, а через отправку сообщений.
Записан
Steven_Orko
Гость
« Ответ #3 : Апрель 13, 2007, 20:49 »

На самом деле можно. )))) Я даже базовый класс для многопоточного  сервера TCP написал. Там используется не QSocket, а QSocketDevice. Все оказалось достаточно просто. Код не кроссплатформенный, но мне оно и не надо. ))) Если надо, выложу в понедельник, как его оттесту и проверю на кроликах. )))

2 Sergeich: В принципе, ты прав )))) Но того, что можно, вполне хватает при правильной компоновке )))

2 Hordi:
Можно и без нее, используя специальный алгоритм блокировки )))

В общем, в итоге у меня получилось нечто, напоминающее QThread Qt series 4. ))))
Записан
Hordi
Гость
« Ответ #4 : Апрель 16, 2007, 11:09 »

Дело в том, что с сообщениями не нужно заморачиваться с блокировками вообще... Отправил и забыл.

добавлено спустя 53 секунды:

 Я раньше также блокировки юзал, но затем все переделал на сообщения, имхо проще.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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