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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по многопоточности  (Прочитано 3953 раз)
merke
Гость
« : Сентябрь 10, 2010, 16:14 »

Всем привет!

В потоках я не очень, не приходилось ещё писать приложения где бы использовал многопоточность, но приходилось читать.

Уважаемые форумчане, не могли бы Вы мне кто нибудь дать объяснение методу moveToThread и показать малленький примерчик использования.

Буду очень благодарен помощи!
« Последнее редактирование: Сентябрь 10, 2010, 16:44 от Александр » Записан
Amigo_sa
Гость
« Ответ #1 : Сентябрь 10, 2010, 16:24 »

Каждый объект, созданный в приложении "принадлежит" потоку, в котором был создан. В том смысле, что его сигналы и слоты будут обрабатываться в цикле событий (EventLoop) данного потока. Метод moveToThread нужен, чтобы сменить поток, в котором будут обрабатываться сигналы объекта.
Есть одна фишка, что если вы создаете экземпляр (наследник) QThread, то он сам (и все другие объекты, созданные в конструкторе) принадлежит не себе, а потоку, в котором создан. Так что часто видел код типа
MyThread::MyThread
{
moveToThread(this);
}
Записан
merke
Гость
« Ответ #2 : Сентябрь 10, 2010, 16:43 »

Т.е. например возьмем за основу приложением многопоточный сервер. Допустим он обслуживает очень много соединений, ну пусть максимум 1000. Чтобы не создавать для каждого нового клиента отдельный поток, я бы например хотел создать 5 потоков, каждый из которых обслуживал по 200 клиентов.

Так идем дальше. При подключении нового клиента я создаю для него новый поток и потом этот поток методом MoveToThread перемещаю в один из тех 5 потоков, правильно я мыслю?
Записан
Amigo_sa
Гость
« Ответ #3 : Сентябрь 10, 2010, 17:15 »

Т.е. например возьмем за основу приложением многопоточный сервер. Допустим он обслуживает очень много соединений, ну пусть максимум 1000. Чтобы не создавать для каждого нового клиента отдельный поток, я бы например хотел создать 5 потоков, каждый из которых обслуживал по 200 клиентов.

Так идем дальше. При подключении нового клиента я создаю для него новый поток и потом этот поток методом MoveToThread перемещаю в один из тех 5 потоков, правильно я мыслю?
Вы же хотели не создавать потоков для каждого подключения:)
Я бы сделал проще. Допустим в вашем пуле 5 рабочих потоков и 1 главный, принимающий входящие соединения. Каждый из потоков я бы связал сигналом с событием входящего соединения. И просто дергал бы эти сигналы с параметрами. А обрабатываться они будут в рабочих потоках. Тут только нужно как то распределить нагрузку между потоками, но это думаю, не сложно.
Записан
SASA
Гость
« Ответ #4 : Сентябрь 13, 2010, 15:32 »

Буду очень благодарен помощи!

Назавите тему со смыслом - помощи будет больше.

Цитировать
Многопоточное программирование > Вопрос по многопоточности

Это масло масляное.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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