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

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

Страниц: 1 [2] 3 4 5   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Простой многопоточный сервер  (Прочитано 32964 раз)
Reklats
Гость
« Ответ #15 : Декабрь 08, 2011, 22:48 »

Вижу. Мне консоль радостно сообщила, что текущий поток - это не поток объекта.
Записан
andrew.k
Гость
« Ответ #16 : Декабрь 08, 2011, 22:52 »

Вижу. Мне консоль радостно сообщила, что текущий поток - это не поток объекта.
Давай я завтра тебе отвечу. Если еще кто-нибудь. Сегодня уже трудно.
Записан
Reklats
Гость
« Ответ #17 : Декабрь 09, 2011, 00:51 »

    Всё. Домучил. Веселый Надо было вызывать
Код
C++ (Qt)
this->moveToThread(this);
в конструкторе потока. В самом первом комментарии мне про это и писали. А поток и сокет создавать без родителя.
    Теперь буду думать, почему первое слово съедает корова  Улыбающийся. Первая партия посланных данных почему-то не доходит... Да и при первом отключении клиента в памяти остаётся более 80кб от того количества кб, которое прибавилось при подключении клиента. При последующих коннектах\ дисконнектах всё высвобождается, причём при последующих коннектах \ дисконнектах прирост осуществляется на ~20кб. Очень и очень странно это всё.
Записан
andrew.k
Гость
« Ответ #18 : Декабрь 09, 2011, 01:23 »

Значит, я ошибся, сказав, что надо в run.
Поэтому я и хотел завтра посмотреть в своем коде. А то не помню уже.

А почему ты пишешь this->moveToThread,  а не просто moveToThread?

Завтра разберемся с твоими данными)
Записан
Bepec
Гость
« Ответ #19 : Декабрь 09, 2011, 07:32 »

Reklats, можно весь твой измененный код?
И клиента и сервера и потоков и слотов ?

Опасности:
1) this->moveToThread(this) и moveToThread(this), это одно и то же Улыбающийся Просто второй вариант экономнее.
2) При первом посыле пакетов, ты проверяешь клиент на готовность получать данные? (если он у тебя тоже поточный, вполне возможно, что не инициализируется к тому времени)
3) Смотреть 1 пост и там есть кое-что  про событийный поток Улыбающийся (использовал или нет?)
Записан
Reklats
Гость
« Ответ #20 : Декабрь 09, 2011, 11:59 »

1) Мне больше нравится мой вариант, т.к. он нагляднее, а компилятор всё равно всё не нужное выкидывает.
3) В смысле запуск exec()? Конечно, без него никак. Не, не использовал.

Вот весь мой код (клиент взял у Шлее):
« Последнее редактирование: Декабрь 09, 2011, 12:49 от Reklats » Записан
Bepec
Гость
« Ответ #21 : Декабрь 09, 2011, 14:09 »

exec() конечно хорошо, но не тормозит ли он у тебя основной поток? Насколько я помню, он перехватывает события с основного потока Улыбающийся
(хотя давно я его пытался туда всунуть, могу и не помнить подробностей )

Код посмотрю
Записан
andrew.k
Гость
« Ответ #22 : Декабрь 09, 2011, 17:01 »

exec() конечно хорошо, но не тормозит ли он у тебя основной поток? Насколько я помню, он перехватывает события с основного потока Улыбающийся
Вот о таких сообщениях я и говорил)

Сегодня просто некогда смотреть твой проект. Вон может Верес справится.

Вы же справитесь, Весес?
Записан
Reklats
Гость
« Ответ #23 : Декабрь 12, 2011, 10:22 »

Покопался в сорцах IMPOMEZIA Simple Chat 2, думал найду решение. Нет, там все подключения обслуживаются в одном потоке, однако. Всё ещё не знаю в чём проблема.
Записан
IMPOMEZIA
Гость
« Ответ #24 : Декабрь 13, 2011, 01:08 »

На самом деле во второй версии немного сложнее, используются 2 потока, один только обслуживает соединения, а второй только обрабатывает данные. Фактически они обмениваются только телами пакетов.

P.S. В ранних версиях действительно используется один поток на всё.
P.P.S. Почему ещё никто не сказал что концепция один поток на соединение не самая удачная, из-за затрат на переключение контекстов потоков при большом числе соединений.

Записан
Bepec
Гость
« Ответ #25 : Декабрь 13, 2011, 07:53 »

Невижу ничего плохого в 1 потоке на соединение. Это использовалось ранее и без особых осложнений.
Записан
BRE
Гость
« Ответ #26 : Декабрь 13, 2011, 07:59 »

Невижу ничего плохого в 1 потоке на соединение. Это использовалось ранее и без особых осложнений.
Лабораторная?
Записан
BRE
Гость
« Ответ #27 : Декабрь 13, 2011, 08:00 »

P.P.S. Почему ещё никто не сказал что концепция один поток на соединение не самая удачная...
Задолбало это говорить. Улыбающийся
Записан
Bepec
Гость
« Ответ #28 : Декабрь 13, 2011, 08:28 »

to BRE

Рабочий продукт. К сожалению ваше "задолбало" отсутсвует в ~90% тем про потоки.
Записан
BRE
Гость
« Ответ #29 : Декабрь 13, 2011, 08:32 »

Рабочий продукт.
А сколько этот сервер обслуживает клиентов одновременно?

К сожалению ваше "задолбало" отсутсвует в ~90% тем про потоки.
Конечно, это есть во многих темах про серверы.
Записан
Страниц: 1 [2] 3 4 5   Вверх
  Печать  
 
Перейти в:  


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