![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
512es |
![]()
Сообщение
#1
|
Участник ![]() ![]() Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
всем привет!
пишу многопоточный высокопроизводительный сервер на qt. сервер прослушивает коннекты на определённый порт и на каждое входящее соединение создаёт отдельный поток. при каждом пришедшем пакете поток отсылает главному потоку сообщение через customEvent. вроде работает, только не знаю как правильнее заставить все дочерние потоки (или один выборочно) отослать определённый пакет клиентам? закинул все потоки массив QVector и передаю в customEvent главного потока ид того кто отправил. правильный путь ли я выбрал? |
|
|
![]() |
ViGOur |
![]()
Сообщение
#11
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
512es |
![]()
Сообщение
#12
|
Участник ![]() ![]() Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
вообще, это мой первый проект на Qt, потому прошу сильно ногами не бить =)
вот как я пытаюсь делать:
знаю что многое ещё выгледит слишком не красиво, но сейчас мне нравное разобраться с потоками.. в дальнейшем вынесу всё управление пользователями в отдельный класс.. так вот, проблема в том что PThread::customEvent(QEvent *event) выполняется почему то в главном потоке( хотя по идее должен в дочернем.. это можно наглядно увидеть через Process Explorer. когда доходит до цикла forever вешается главный поток, а не дочерний( |
|
|
512es |
![]()
Сообщение
#13
|
Участник ![]() ![]() Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
попробовал через сигнал\слот..
всё равно в том же потоке выполняется =( |
|
|
512es |
![]()
Сообщение
#14
|
Участник ![]() ![]() Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
вообщем, всю голову сломал, не знаю как сделать(
http://trolltech.com/developer/faqs/faq.20...0-02.9810372345 написано что есть 3 способа: 1) передача эвентов 2) QCoreApplication::invokeLater() 3) и сигнал\слот с QueuedConnection но к сожалению всё сказаное там для явы.. пробовал эвенты и через сигнал\слот с QueuedConnection. пробовал даже вызывать метод в котором эмитится сигнал по которому вызывается нужный слот, как тут: http://forum.sources.ru/index.php?showtopic=245838&hl= результат один и тот же( обгуглил весь инет, народ, не ужели никто не знает как вызывать метод из класса дочернего потока чтобы он выполнился в том самом дочернем а не в главном? на ум приходит ещё один оч кривой способ.. отказаться от родителя в дочерних потоках и добавить в нужные методы moveToThread(this) иии.. вот только что родилась идея ещё хуже.. пересылать данные по TCP на локалхост соединению между главным и дочерними потоками =)) бред.. |
|
|
ViGOur |
![]()
Сообщение
#15
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
ViGOur |
![]()
Сообщение
#16
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Вот я пример набросал, правда с рисованием, но думаю идея будет понятна...
![]() Раскрывающийся текст main.cpp
xThread.h
xThread.cpp
Сообщение отредактировал ViGOur - 13.11.2008, 14:31 |
|
|
512es |
![]()
Сообщение
#17
|
Участник ![]() ![]() Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
ViGOur, спасибо!) то что надо!))
у меня рождалась мысль что объект надо создавать в секции run() но уже не верилось что это заработает.. вообще жудко запутаная конструкция получилось, жаль что нельзя упростить.. хотяя... |
|
|
ViGOur |
![]()
Сообщение
#18
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
512es |
![]()
Сообщение
#19
|
Участник ![]() ![]() Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
разве что от CxThread::drawText() удалось избавиться)
вообще сервер работает быстро и надёжно) сколько бы не подключалось клиентов, пакеты им приходят моментально!) отказался от эвентов, использую везде теперь только сигнал\слот =) |
|
|
Litkevich Yuriy |
![]()
Сообщение
#20
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
вообще сервер работает быстро и надёжно) сколько бы не подключалось клиентов, пакеты им приходят моментально!) Ну вот, а на пргорге тема о высоконагруженном сервере на Qt зашла в тупик (тык)
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 24.5.2025, 9:21 |